参见英文答案 >
In C, why can’t a const variable be used as an array size initializer? 3个
为什么在C99中将变量作为大小参数声明在函数外部是不可能的?
例如,请考虑此代码段.
它会导致错误:在文件范围编译错误时可变地修改’矩阵’.
static int const height = 5;
static int const width = 5;
static int const matrix[height][width] = { ... };
int main(void){ ... }
我知道c中的const并不意味着不变.这意味着“只读”,但我没有正确理解它有什么影响.
那么为什么数组不能从只读内存中获取它们的大小呢?
我知道这个问题可以用#defines
或enum
解决,所以我更感兴趣的是解释为什么会这样.
最佳答案 C99 6.7.5.2/2数组声明符:
Only ordinary identifiers (as defined in 6.2.3) with both block scope or function prototype scope and no linkage shall have a variably modified type. If an identifier is declared to be an object with static storage duration, it shall not have a variable length array type.