C11 标准 (N1548) 第 6.7.6 节规定了声明符的规范。
根据我的理解(参见关于剖析 C 声明的 answer),数组声明 int * arr[5];
有两部分:(a) 声明说明符 int
,以及 (b) 声明符 * arr[5]
。我的问题是如何根据 C11 标准解释声明符部分。
标准说:
好的,所以 *
显然对应于“指针”部分。因此,arr[5]
必须对应“direct-declarator”部分。然而,在这个标准的“direct-declarator”的扩展中,似乎没有匹配arr[5]
的条目——因为它似乎是常量表达式5
括号中的内容与“type-qualifier-list”或“assignment-expression”不匹配。
那么这个声明如何符合 C11 标准的规范呢?
最佳答案
5
是赋值表达式。
如果您查看assignment-expression 的定义,其中之一是conditional-expression。一个定义是逻辑或表达式。通过追踪此定义链,您最终将到达主要表达式,其中一个定义是常量。
关于C11:定长数组声明如何符合 C11 标准的规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51741412/