非可变长度数组中的浮点常量表达式在GCC中起作用 - 是否记录在案?

时间:2018-03-22 15:08:53

标签: gcc

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扩展。

我的问题是:我在文档中找不到任何提及这应该有效的内容。如果有人能够将我指向文档中的正确位置,或者 - 如果您对此有所了解 - 请告诉我我不能依赖它,我将不胜感激!

0 个答案:

没有答案