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.
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.