2017-02-19 115 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 [*]); 
相关问题