gcc - c 如何禁用这里特定警告

  显示原文与译文双语对照的内容

这里简单代码:


#define WIDTH 500.5


#define NB 23.2



int x[(int)(WIDTH/NB)];



给我一个警告:


prog.c:4:1: warning: variably modified 'x' at file scope [enabled by default]



如果我设置 #define WIDTH 500#define NB 23,警告会消失。

传递 WIDTH 宏的浮点值强制由编译器计算,因此发出警告,因为 array 没有常量大小。

预处理的C 代码看起来像 int x[(int)(500.5/23.2)];,而 int x[(int)(500/23)]; 对于编译器是很好的( 值已经是常量整数)

我想找到一种方法

有趣的是:用 g++ 编译我没有警告,而我在这里读到变长数组不正式支持 C++ 。 但这不是我的选择,因为我需要坚持。

时间: 原作者:

它违反了标准:

整型常量表达式

整表达式表达式只能包含赋值运算符,但只能转换为整数类型,但强制转换为整数类型类型的操作数时,只能将算术类型转换为整型类型

还有:

以下上下文要求称为整型常量表达式的表达式:

  • array 指示符中的索引( 自 C99 )
原作者:
...