这是我的代码:
int main()
{
const int LEN = 5;
int x[LEN];
}
VS10说:
错误C2057:预期的常数 表达
错误C2466:无法分配数组 常数0
错误C2133:'x':未知大小
我甚至尝试了这个页面中的代码并且它给出了同样的问题(我评论了给出错误的代码,并且取消注释了正确的代码): http://msdn.microsoft.com/en-us/library/eff825eh%28VS.71%29.aspx
如果我正在尝试一个糟糕的编译器,我会认为这是编译器中的一个错误,但它是VS2010!
答案 0 :(得分:10)
您可能使用.c扩展名编译了代码。 MS Visual C不支持C99。在C89中,数组的大小必须是常量表达式。 C中的const
限定变量不是常量。它们不能用于需要真正常量的地方。
另请阅读AndreyT的this excellent post。
尝试使用.cpp扩展名保存文件。
答案 1 :(得分:2)
根据http://msdn.microsoft.com/en-us/library/3ffb821x.aspx,“声明为const的值使用常量表达式初始化”在数组边界中是合法的,因此这是有效的C ++代码。
因此,这可能是编译器错误,也可能是#define某处奇怪的事情。正如sje397的评论建议的那样,尝试除LEN
以外的其他名称?另外,这实际上是你的整个代码,还是标题也是#include? p>
编辑添加:此外,如果您将其编译为C,这当然是有效的C ++代码并不重要,正如其他人所指出的那样。
答案 2 :(得分:2)
您也可以使用
C
答案 3 :(得分:1)
因为在这种情况下,我可以这样做:
int main()
{
const int LEN = 5;
int* LENptr = (int*)(&LEN);
*LENptr = 10;
int x[LEN];
}
哪个const在此代码中仅表示只读,而不是编译时常量