因为看到一个资料说C99支持VLA即变长数组,也就是可以用变量表达式定义数组长度。
int n; scanf("%d",&n); int a[n]; /*do something*/
但是我在VS2012中如此做却发生编译错误。首先是不支持变长数组,提示“应输入常量表达式”,二是不支持变量随用随定义,提示“缺少;在类型int的前面”,将文件扩展名改为.cpp后后一个error提示消失,但是前一个依旧存在。
于是就很迷茫了,VS2012难道不支持最新的C标准和C++标准吗?
又如:以下一段代码:
int main(void) { int a[] = {0,1,2,3,4,5,6,7,8,9} for(int i = 0; i < 10; i++) //这里的声明变量编译不通过 { int t = a[i]; //这里可以编译通过 printf("%d",t); } }
这又是怎么解释呢?
记得以前看过一篇文章,说微软主要的方向是对c++的编译器提供新特性的支持(对c++11还是做了许多支持的),而不是c编译器。
再加上c/c++ 本来是visual studio中的二等公民,c编译器好像还是不支持c99的(没看到微软说过支持,visualstudio中测试也是不支持)。如果非要用这些特性,并且不考虑用visual studio的话,可以选择gcc编译器。
另外,对于你那个补充的代码,c语言的标准一直就支持这种形式的。变量定义只要是在块开头(花括号)就可以了,而不是非要在函数开头,所以那是能编译过去的。
知道了,谢谢。我手边也有gcc编译器,虽然不是很常用。。。主要是习惯了VS这个综合性IDE的强大功能了,相比之下GCC的功能就没有那么强大了
变量任意地方定义和变长数组在C11的新特性里面我没看到有说支持。同样我也没看变长数组在C++11里面有说支持,还是说你是说constexpr这个关键字