C语言 在文件范围内可变修改的“堆栈”[重复]

b5buobof  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(78)

此问题在此处已有答案

Variably modified array at file scope in C(4个答案)
"static const" vs "#define" vs "enum"(17回答)
Defining the size of an array using a const int(3个答案)
4年前关闭。
请考虑:

#include <stdio.h>

int const a = 9;
int stack[a];
int main()
{
    return 0;
}

字符串
上面的代码给出了一个错误:
在文件范围内可变修改的“堆栈”
但是当我把代码改为:

#include <stdio.h>

#define b 3

int stack[b];
int main()
{
    return 0;
}


它编译没有错误。虽然#define和const variable都用于定义常量标识符,但为什么当我使用const var而不是#define时会出现错误?
我搜索了类似的问题,但他们都给出了关于错误的解决方案,但没有理由。
我搜索了const#define,发现有时GCC编译器会将const识别为只读,但这太令人困惑了。

pjngdqdw

pjngdqdw1#

在C语言中,静态存储变量可以具有由常量表达式定义的大小。使用变量(甚至是常量)作为大小不是这样的表达式。
这个错误是百分之百正确的。
第二种情况:预处理器用作为常量表达式的3在文本上替换b
常量表达式是在编译期间计算的东西。变量值只能在运行时计算。

相关问题