2017-02-19 81 views
1

我在寫一個自定義的C99解析器。我從this鏈接中獲得了語法。這種語法說下面是聲明數組一個有效的語法 -數組聲明中方括號內的星號是什麼意思C

int arr[*]; 

語法的相關部分follwing -

direct-declarator ::= 
    identifier 
    "(" declarator ")" 
    direct-declarator "[" type-qualifier-list? assignment-expression? "]" 
    direct-declarator "[" "static" type-qualifier-list? assignment-expression "]" 
    direct-declarator "[" type-qualifier-list "static" assignment-expression "]" 
    direct-declarator "[" type-qualifier-list? "*" "]" 
    direct-declarator "(" parameter-type-list ")" 
    direct-declarator "(" identifier-list? ")" 

我試圖編譯使用GCC此聲明中的代碼。它給了我下面的警告 -

error: ‘[*]’ not allowed in other than function prototype scope

所以,我想聲明一個函數原型這種類型的語法和它沒有任何錯誤或警告編譯。我沒有得到的是這個語法可能在語義上是什麼意思。任何專家的解釋?

+0

這只是一種明確的表達方式,表示該數組維度沒有傳遞任何值。 (你必須始終提供最後一個,但前面的維是可選的)(這是我正在尋找的鏈接) –

+0

也許閱讀標準的其餘部分,如果你要寫一個解析器? –

回答

2

它是一個具有未指定大小的可變長度數組的聲明符。 Furhtermore,以下聲明

void func(size_t n, char s[n]); 

等同於簡單地寫:

void func(size_t n, char s[*]); 

以上是特別有用寫頭,在那裏你通常只聲明參數類型

void func(size_t, char [*]); 
相關問題