数组声明的方括号内的星号在C 中是什么意思

我正在编写一个自定义C99解析器。 我从这个链接得到了语法。 这个语法说下面是声明数组的有效语法 –

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使用此声明编译代码。 它给了我以下警告 –

错误:除函数原型范围外,不允许使用'[*]’

所以我尝试使用这种类型的语法声明一个函数原型,并且编译时没有任何错误或警告。 我没有得到的是这种语法在语义上可能意味着什么。 有专家解释吗?

它是具有未指定大小的可变长度数组的声明符。 此外,还有以下声明

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

相当于简单地写:

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

以上内容对于编写​​标题特别有用,您通常只声明参数类型

 void func(size_t, char [*]);