我发现了一个有趣的事实,但是我不明白它是如何工作的。
以下这段代码完美地运行。
#include <stdio.h>
int main() {
const int size = 10;
int sampleArray[size];
typedef char String [size];
return 0;
}
然后,我尝试只使用具有全局范围的常量变量,而且仍然正常。
#include <stdio.h>
const int size = 10;
int main() {
int sampleArray[size];
typedef char String [size];
return 0;
}
但是,如果我将数组的作用域也改为全局的话,我会得到以下错误信息:
错误:文件作用域下的可变大小的‘sampleArray’
#include <stdio.h>
const int size = 10;
int sampleArray[size];
typedef char String [size];
int main() {
return 0;
}
我没明白!如果我把常量变量替换成
#define
,也可以。我知道#define
变量是预处理的,而且据我所知,常量变量只是只读的。但到底是什么导致了全局作用域的问题呢?我不明白第三段代码有什么问题,如果第二段代码是正常的话。
const
变量是编译器不允许修改的变量,但它仍然是一个变量。虽然该值可能在编译时未知(因为它可能来自其他文件),但数组大小必须是已知的,因此被禁止修改。 - Luis Colorado