C编译器差异(VS2008和g)

前端之家收集整理的这篇文章主要介绍了C编译器差异(VS2008和g)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试在 Linux和VS 2008中编译以下代码
#include <iostream> //  this line has a ".h" string attached to the iostream string in the linux version of the code
using namespace std; // this line is commented in the linux version of the code
void main()
{

  int a=100;
  char arr[a];

  arr[0]='a';
  cout<<"array is:"<<arr[0];

}

此行适用于g版本,但在Visual Studio中不起作用.
它会引发以下错误

1>c:\users\bibin\documents\visual studio 2008\projects\add\add\hello.cpp(7) : error C2057: expected constant expression
1>c:\users\bibin\documents\visual studio 2008\projects\add\add\hello.cpp(7) : error C2466: cannot allocate an array of constant size 0
1>c:\users\bibin\documents\visual studio 2008\projects\add\add\hello.cpp(7) : error C2133: 'arr' : unknown size

这是一个有效的陈述吗?两个编译器如何对同一语言有不同的解释

解决方法

这是C99功能
char arr[a]; // VLA: Variable Length Arrays (C99) but not C++!

GCC支持C99的许多功能,但VC没有,我认为它不会在不久的将来,因为他们越来越专注于C.无论如何,您只需将声明更改为:

const int a=100; // OK the size is const now!
  char arr[a];

猜你在找的C&C++相关文章