【发布时间】:2017-02-19 10:07:34
【问题描述】:
我正在编写一个自定义 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 编译带有此声明的代码。它给了我以下警告 -
错误:'[*]' 不允许在函数原型范围之外
所以我尝试用这种类型的语法声明一个函数原型,它编译时没有任何错误或警告。我没有得到的是这种语法在语义上可能意味着什么。哪位高手能解释一下?
【问题讨论】:
-
这只是一种明确的方式来表示没有为该数组维度传递任何值。 (您必须始终提供最后一个维度,但前面的维度是可选的)(这就是我要查找的链接)
-
如果您要编写解析器,也许可以阅读标准的其余部分?