此问题在此处已有答案:
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
识别为只读,但这太令人困惑了。
1条答案
按热度按时间pjngdqdw1#
在C语言中,静态存储变量可以具有由常量表达式定义的大小。使用变量(甚至是常量)作为大小不是这样的表达式。
这个错误是百分之百正确的。
第二种情况:预处理器用作为常量表达式的3在文本上替换
b
。常量表达式是在编译期间计算的东西。变量值只能在运行时计算。