我创建堆栈数组作为数组定义 - 表达必须有一个恒定的值
static const int size = 10;
void foo() {
..
int array[size];
..
}
但是,我得到的编译错误:“表达必须有一个恒定的值”,即使大小是一个常数。我可以使用宏
#define SIZE (10)
但我很奇怪,为什么size
标const
导致编译错误。
我创建堆栈数组作为数组定义 - 表达必须有一个恒定的值
static const int size = 10;
void foo() {
..
int array[size];
..
}
但是,我得到的编译错误:“表达必须有一个恒定的值”,即使大小是一个常数。我可以使用宏
#define SIZE (10)
但我很奇怪,为什么size
标const
导致编译错误。
在C语言中的关键字const
无关与常数。在C语言中,根据定义,术语“常量”是指文字值和枚举常量。如果你真的需要一个常量:这个就是你必须使用的:使用一个字面值(定义一个宏来给你的常量一个名字),或者使用一个枚举常量。
(阅读此处了解详情:Shall I prefer constants over defines?)
此外,C99和可能使用的非恒定值作为数组的大小为局部数组语言的更新版本。这意味着即使您的size
不是一个常量,您的代码也应该在现代C中编译。但你显然使用的是较旧的编译器,所以在你的情况下,
#define SIZE 10
是正确的路要走。
为什么downvotes?他是对的... – Quentin
谢谢你认为它和C++一样。 – anderssinho
答案是另一个问题计算器,HERE
it's because In C objects declared with the const modifier aren't true constants. A better name for const would probably be readonly - what it really means is that the compiler won't let you change it. And you need true constants to initialize objects with static storage (I suspect regs_to_read is global).
C11支持变长数组,所以OP的编译器可能已经过时了。 –
它不*不够*我害怕。改用宏。 – Bathsheba
你的意思是不断变化的意思?你能否解释 – Iceman
旧编译器?需要升级? –