ho cercato di compilare il seguente codice in Linux e VS 2008:C++ differenze compilatore (VS2008 e 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];
}
Questa linea lavora nel g ++ versione, ma non funziona in Visual Studio. Getta il seguente errore:
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
Si tratta di una dichiarazione valida ?? Come possono due compilatori avere diversa interpretazione della stessa langauge
Qual è la sua impostazione per il compilatore da utilizzare in Visual Studio? L'impostazione predefinita è Microsoft Visual C++. GCC, tuttavia, compila ISO C++. Non sono la stessa cosa: ci sono alcune cose legali nell'implementazione di C++ da parte di Microsoft che non sono legali in ISO C++ e viceversa. –
@thomas: Quindi c'è un modo per cambiarlo in ISO C++? Mi piacerebbe che il codice scritto per uno funzioni nell'altra macchina. Quelli che non coinvolgono chiamate di sistema almeno. – tomkaith13
g ++ non usa ISO C++ di default, usa ISO con estensioni GNU. Se vuoi il C++ standard, usa il flag -pedantic (e quindi il VLA fallirà su gcc, dato che non è standard). Per ottenere C++ standard in Visual Studio, evitare qualsiasi tipo di progetto con "CLR" nel nome e utilizzare l'opzione/Za per disabilitare le estensioni. –