[英]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
是一個指向int
的cvr指針( cvr是const
, volatile
或restrict
限定符)。 例如,對於const
它表示a
是一個指向int
的const
指針(即,類型為int * const
)。
所以參數聲明:
T param[cvr e]
與參數聲明相同:
T * cvr param
* 在參數數組聲明符中
void h(int a[*]);
函數聲明中的正式數組參數聲明中的[*]
(不是函數定義的一部分)表示正式數組是可變長度數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.