首页 新闻 会员 周边 捐助

VS2010和VS2012究竟支持怎样的C标准?

0
悬赏园豆:10 [已解决问题] 解决于 2012-10-24 17:43

因为看到一个资料说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);
      }
}

这又是怎么解释呢?

飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:393
提问于:2012-10-23 21:18
< >
分享
最佳答案
0

记得以前看过一篇文章,说微软主要的方向是对c++的编译器提供新特性的支持(对c++11还是做了许多支持的),而不是c编译器。

再加上c/c++ 本来是visual studio中的二等公民,c编译器好像还是不支持c99的(没看到微软说过支持,visualstudio中测试也是不支持)。如果非要用这些特性,并且不考虑用visual studio的话,可以选择gcc编译器。

另外,对于你那个补充的代码,c语言的标准一直就支持这种形式的。变量定义只要是在块开头(花括号)就可以了,而不是非要在函数开头,所以那是能编译过去的。

收获园豆:10
天方 | 大侠五级 |园豆:5432 | 2012-10-24 10:08

知道了,谢谢。我手边也有gcc编译器,虽然不是很常用。。。主要是习惯了VS这个综合性IDE的强大功能了,相比之下GCC的功能就没有那么强大了

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2012-10-24 17:43
其他回答(1)
0

变量任意地方定义和变长数组在C11的新特性里面我没看到有说支持。同样我也没看变长数组在C++11里面有说支持,还是说你是说constexpr这个关键字

陈俊铭 | 园豆:204 (菜鸟二级) | 2013-03-29 00:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册