【问题标题】:What does asterisk inside square bracket of array declaration mean in C [duplicate]数组声明方括号内的星号在C中是什么意思[重复]
【发布时间】: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 编译带有此声明的代码。它给了我以下警告 -

错误:'[*]' 不允许在函数原型范围之外

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

【问题讨论】:

  • 这只是一种明确的方式来表示没有为该数组维度传递任何值。 (您必须始终提供最后一个维度,但前面的维度是可选的)(这就是我要查找的链接)
  • 如果您要编写解析器,也许可以阅读标准的其余部分?

标签: c arrays syntax


【解决方案1】:

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

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

相当于简单的写:

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

上面的内容对于编写​​标头特别有用,通常只声明参数类型

void func(size_t, char [*]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2017-01-09
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多