【发布时间】:2019-11-16 15:39:25
【问题描述】:
int const a=9;
int stack[a];
int main()
{
return 0;
}
上面的代码给出了一个错误:在文件范围内可变地修改了'stack'
但是当我将代码更改为:
#define b 3
int stack[b];
int main()
{
return 0;
}
它编译没有错误。虽然#define 和 const 变量都用于定义常量标识符,但为什么当我使用 const var 而不是 #define 时会出现错误。我搜索了类似的问题,但他们都给出了关于错误,但没有理由。
搜索了const和#define,发现有时gcc编译器将const识别为只读但太混乱了。
【问题讨论】:
-
静态数组的数组维度必须是在编译时解析的整数常量表达式。它很好地定义了什么是整数常量表达式,什么不是整数常量表达式。尤其是,value
const int的计算不允许在整数常量表达式中。 -
什么是整数常量表达式,整数和整数常量表达式有什么区别
-
来自 C 2011 标准,6.6,常量表达式:“整数常量表达式应具有整数类型,并且只能具有整数常量、枚举常量、字符常量、
sizeof表达式的操作数,其结果是整数常量、_Alignof表达式和作为强制类型转换的直接操作数的浮点常量。整数常量表达式中的强制转换运算符只能将算术类型转换为整数类型,除非作为 sizeof 或_Alignof运算符的操作数的一部分。”