intenté compilar el código siguiente en Linux y VS 2008:C++ diferencias compilador (VS2008 y g ++)
#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];
}
Esta línea funciona en la versión g ++, pero no funciona en el Visual Studio. Se lanza el siguiente error:
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
¿Es esta una declaración válida ?? ¿Cómo pueden dos compiladores tienen diferente interpretación de la misma langauge
¿Cuál es su escenario de el compilador para usar en Visual Studio? El valor predeterminado es Microsoft Visual C++. GCC, sin embargo, compila ISO C++. No son lo mismo: hay algunas cosas que son legales en la implementación de C++ de Microsoft que no son legales en ISO C++ y viceversa. –
@thomas: ¿Hay alguna forma de cambiarlo a la configuración ISO C++? Me gustaría que el código escrito para que uno funcione en la otra máquina. Los que no involucran llamadas al sistema al menos. – tomkaith13
g ++ no usa ISO C++ de forma predeterminada, usa ISO con extensiones de GNU. Si quiere C++ estándar, use el indicador -entético (y luego el VLA fallará en gcc, ya que no es estándar). Para obtener C++ estándar en Visual Studio, evite cualquier tipo de proyecto con "CLR" en el nombre y use la opción/Za para deshabilitar las extensiones. –