在文件范围内可变地修改了“堆栈”

时间:2019-07-06 08:58:40

标签: c dsa

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识别为只读,但是它太令人困惑了。

1 个答案:

答案 0 :(得分:0)

在C语言中,静态存储变量的大小可以由常量表达式定义。使用变量(甚至是常数1)作为大小不是这样的表达式。

该错误是100%正确的。

第二种情况:预处理程序将b用3替换为常数表达式

常量表达式是在编译期间求值的。只能在运行时评估变量值。