int const a=9;
int stack[a];
int main()
{
return 0;
}
上面的代码给出了一个错误:在文件范围内可变地修改了“堆栈”
但是当我将代码更改为:
#define b 3
int stack[b];
int main()
{
return 0;
}
它编译时没有错误。虽然#define和const变量都用于定义常量标识符,但是为什么当我使用const var而不是#define时为什么会出错。我搜索了类似的问题,但他们都给出了解决方案错误,但没有理由。
搜索了const和#define,发现有时gcc编译器将const识别为只读,但是它太令人困惑了。
答案 0 :(得分:0)
在C语言中,静态存储变量的大小可以由常量表达式定义。使用变量(甚至是常数1)作为大小不是这样的表达式。
该错误是100%正确的。
第二种情况:预处理程序将b
用3替换为常数表达式
常量表达式是在编译期间求值的。只能在运行时评估变量值。