2014-06-16 43 views
2

我创建堆栈数组作为数组定义 - 表达必须有一个恒定的值

static const int size = 10; 

void foo() { 
.. 
int array[size]; 
.. 
} 

但是,我得到的编译错误:“表达必须有一个恒定的值”,即使大小是一个常数。我可以使用宏

#define SIZE (10) 

但我很奇怪,为什么sizeconst导致编译错误。

+3

它不*不够*我害怕。改用宏。 – Bathsheba

+0

你的意思是不断变化的意思?你能否解释 – Iceman

+1

旧编译器?需要升级? –

回答

12

在C语言中的关键字const无关与常数。在C语言中,根据定义,术语“常量”是指文字值和枚举常量。如果你真的需要一个常量:这个就是你必须使用的:使用一个字面值(定义一个宏来给你的常量一个名字),或者使用一个枚举常量。

(阅读此处了解详情:Shall I prefer constants over defines?

此外,C99和可能使用的非恒定值作为数组的大小为局部数组语言的更新版本。这意味着即使您的size不是一个常量,您的代码也应该在现代C中编译。但你显然使用的是较旧的编译器,所以在你的情况下,

#define SIZE 10 

是正确的路要走。

+0

为什么downvotes?他是对的... – Quentin

+0

谢谢你认为它和C++一样。 – anderssinho

2

答案是另一个问题计算器,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).

+0

C11支持变长数组,所以OP的编译器可能已经过时了。 –

相关问题