这是我的代码:
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!
您可能已经使用 .c 扩展名编译了代码。 MS Visual C 不支持 C99。在 C89 中,数组的大小必须是常量表达式。
const
限定变量不是C中的常量。它们不能用在需要实数常量的地方。
另请阅读 AndreyT 的这篇优秀的文章。
尝试使用 .cpp 扩展名保存文件。
你也可以使用
int main()
{
enum { LEN = 5 };
int x[LEN];
}
根据 http://msdn.microsoft.com/en-us/library/3ffb821x.aspx,“用常量表达式初始化的声明为 const 的值”在数组范围内是合法的,因此这是有效的 C++ 代码。
因此,这要么是编译器错误,要么是#define 某处出现的奇怪情况。 正如 sje397 的评论所建议的,尝试使用
LEN
以外的其他名称来获取长度? 另外,这实际上是您的整个代码,还是标头也被#included?
编辑添加:此外,如果您将其编译为 C,那么这是有效的 C++ 代码这一事实当然并不重要,正如其他人指出的那样。
因为在这种情况下,我可以这样做:
int main()
{
const int LEN = 5;
int* LENptr = (int*)(&LEN);
*LENptr = 10;
int x[LEN];
}
const在此代码中仅表示只读,而不是编译时常量