簡體   English   中英

C99中那些奇怪的數組大小[*]和[靜態]是什么?

[英]What are those strange array sizes [*] and [static] in C99?

顯然,以下函數原型在C99和C11中有效:

void foo(int a[const *]);

void bar(int a[static volatile 10]);

那些奇怪的下標符號*static和CV限定符的目的是什么?

它們有助於區分靜態類型數組和可變長度數組嗎? 或者他們只是語法糖?

參數數組聲明符中的static

 void f(int a[static 10]);

static here表示參數a是指向int的指針,但是數組objet(其中a是指向其第一個元素的指針)至少有10元素。

然后編譯器有權假設f參數不是NULL ,因此它可以執行一些優化。 gcc目前不執行任何優化( 來源 ):

“參數數組聲明符中的static提供的信息不用於優化。將來與預取工作結合使用可能是有意義的。”

參數數組聲明符中的限定符

void g(int a[cvr 10]);

inside g a是一個指向intcvr指針( cvrconstvolatilerestrict限定符)。 例如,對於const它表示a是一個指向intconst指針(即,類型為int * const )。

所以參數聲明:

T param[cvr e] 

與參數聲明相同:

T * cvr param

* 在參數數組聲明符中

void h(int a[*]);

函數聲明中的正式數組參數聲明中的[*] (不是函數定義的一部分)表示正式數組是可變長度數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM