standard C中的非变长数组声明的大小(6.7.6.2)必须具有整数常量表达式。即使将它们转换为整数,也不允许使用浮点表达式,只有一个例外 - 直接将浮点常量转换为整数:(int)5.5
是允许的,(int)(11.0/2)
不是({{3 }})。
然而,这适用于GCC。 GCC警告它(使用6.6),但生成的代码可以按照我的预期运行。这些是等价的:
int a[ 6 ]; /* Standard C */
int b[ (int)6.4 ]; /* Standard C */
int c[ (int)(3.2*2) ]; /* Not standard - GCC allows it but warns */
这很好,允许GCC定义高于默认标准的规则。事实上,由于GCC是我的目标架构可用的唯一编译器,我不介意使用这个gcc扩展。
我的问题是:我在文档中找不到任何提及这应该有效的内容。如果有人能够将我指向文档中的正确位置,或者 - 如果您对此有所了解 - 请告诉我我不能依赖它,我将不胜感激!