我正在编写一个自定义C99解析器。我从this链接获得了语法。该语法表示以下是声明数组的有效语法 -
int arr[*];
语法的相关部分如下 -
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使用此声明编译代码。它给了我以下警告 -
错误:'[*]'不允许在函数原型范围之外
所以我尝试使用这种类型的语法声明一个函数原型,并且编译时没有任何错误或警告。我没有得到的是这种语法在语义上可能意味着什么。有解释的专家吗?
答案 0 :(得分:2)
它是一个具有未指定大小的可变长度数组的声明符。此外,还有以下声明
void func(size_t n, char s[n]);
相当于简单地写:
void func(size_t n, char s[*]);
以上内容对于编写标题特别有用,您通常只声明参数类型
void func(size_t, char [*]);