C11:定长数组声明如何符合 C11 标准的规范?

C11: how does fixed-length array declaration fit in the C11 standard's specification?

C11 标准 (N1548) 第 6.7.6 节规定了声明符的规范。

根据我的理解(请参阅关于剖析 C 声明的 answer),数组声明 int * arr[5]; 有两部分:(a) 声明说明符 int,以及 (b)声明符 * arr[5]。我的问题是如何根据C11标准解释声明符部分。

标准说: 好的,所以 * 显然对应于 "pointer" 部分。因此,arr[5] 必须对应 "direct-declarator" 部分。但是,在这个标准中"direct-declarator"的扩展中,似乎没有匹配arr[5]的条目——因为括号中的常量表达式5似乎与[不匹配=30=] 或 "assignment-expression".

那么这个声明如何符合 C11 标准的规范?

5赋值表达式.

如果您查看 assignment-expression 的定义,其中之一是 conditional-expression。一个定义是 逻辑或表达式 。通过追踪这个定义链,你最终会到达 primary-expression,其中一个定义是 constant.