为什么const int x = 5; 在C中不是常量表达式?

pm100

我以为C不再让我感到惊讶,但这令我感到惊讶。

    const int NUM_FOO = 5;
    ....

    int foo[NUM_FOO];
==>error C2057: expected constant expression

我的C ++经验使我在内部#define尽可能不赞成使用因此,这真是一个惊喜。VS2019,使用/ TC编译。我认为C99仍然允许可变大小的数组。

  1. 谁能解释为什么会出现拒绝,因为编译器在编译时肯定知道数组的大小?

  2. C99是否允许可变大小的数组?

詹姆斯德林
  1. const在C中没有声明编译时常量。enum如果要避免使用常量,而#define想要一个可以在调试器中显示的符号名称,则可以改用常量

  2. C99支持沃拉斯。但是,VS2019不支持C99。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

(int &&)5是整数常量表达式吗?

const int <variable>不能出现在常量表达式中

为什么const char * foo =“ Hello”; 编译但不是const int * foo = 5 ;?

为什么enum不是常量表达式?

为什么参数不是常量表达式?

为什么int x {y = 5}是可能的?

使用C ++ 20 <=>将std :: variant与int比较不是常量表达式

为什么C和C ++允许表达式(int)+ 4 * 5?

为什么此表达式不是常量表达式?

C ++:int * x [5]和int(* x)[5]有什么区别?

C ++ 11中常量表达式的模板int参数

为什么折叠表达式不能出现在常量表达式中?

为什么当n是const值时int x [n]是错误的?

为什么 C++20 范围适配器的返回视图不是常量表达式?

为什么const int需要extern而不是const char *

有什么区别-const int x = 5000; 和const int x = 50'00; 在C ++中?

C ++:“(静态const双变量)不能出现在常量表达式中”

int *(*(x [3])())[5]行是什么?用C做?

C ++ 11标准中的核心常量表达式是什么?

为什么用成员数组调用constexpr函数不是常量表达式?

为什么这不是一个常量表达式?

为什么$ x = 5; $ x +++ $ x ++; 等于11在PHP中?

Decltype(0.5) x = 5; 使 x *Double* 而不是 *Float*。为什么?

为什么DateTime.MinValue是一个常量表达式,而不是VB.NET中的DateTime.MaxValue?

为什么在lambda中隐式捕获const int(或短裤)?

对于静态final int,case表达式必须是常量表达式。

const变量的值在常量表达式中是否可用,取决于变量类型

为什么Android的“不是以下字符”正则表达式是[!x]而不是[^ x]?

C ++为什么可以通过函数修改const X&?