2 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
第一個(gè)聲明告訴編譯器someArray
長度至少為 100個(gè)元素。這可以用于優(yōu)化。例如,它也意味著someArray
永遠(yuǎn)不會為NULL。
請注意,C標(biāo)準(zhǔn)不要求編譯器診斷何時(shí)對函數(shù)的調(diào)用不滿足這些要求(即,它是靜默未定義的行為)。
第二個(gè)聲明只是聲明someArray
(不是someArray
's的元素?。閏onst,即你不能寫someArray=someOtherArray
。它與參數(shù)相同char * const someArray
。
此語法僅[]
在函數(shù)參數(shù)列表中的數(shù)組聲明符的最內(nèi)層中可用,在其他上下文中沒有意義。
涵蓋上述兩種情況的標(biāo)準(zhǔn)案文載于C11 6.7.6.3/7(C99為6.7.5.3/7):
一個(gè)參數(shù)為“”類型的陣列“”的聲明,應(yīng)調(diào)整至“”合格指針為類型“”,其中類型限定符(如果有的話)的那些內(nèi)的指定
[
和]
該陣列類型的推導(dǎo)。如果關(guān)鍵字static也出現(xiàn)在數(shù)組類型派生的[
和]
中,那么對于每次對函數(shù)的調(diào)用,相應(yīng)的實(shí)際參數(shù)的值應(yīng)提供對數(shù)組的第一個(gè)元素的訪問,其中元素的數(shù)量至少與大小表達(dá)。

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
關(guān)于這個(gè)主題:我想知道是否應(yīng)該考慮使用int foo(struct bar [static 1]);
而不是int foo(struct bar *);
作為不接受NULL指針的函數(shù)的簽名。(我知道gcc有一個(gè)替代的非標(biāo)準(zhǔn)語法來標(biāo)記這樣的函數(shù),以便編譯器可以發(fā)出警告..)
- 2 回答
- 0 關(guān)注
- 1010 瀏覽
添加回答
舉報(bào)