J'ai essayé de compiler le code suivant dans Linux et VS 2008:C++ différences de compilateur (VS2008 et 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];
}
Cette ligne fonctionne dans la g ++ version, mais ne fonctionne pas dans Visual Studio. Il jette l'erreur suivante:
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
Est-ce une déclaration valable ?? Comment deux compilateurs ont une interprétation différente de la même langauge
Quelle est votre réglage pour le compilateur à utiliser dans Visual Studio? La valeur par défaut est Microsoft Visual C++. GCC, cependant, compile ISO C++. Ils ne sont pas identiques - il y a certaines choses qui sont légales dans l'implémentation de C++ de Microsoft qui ne sont pas légales dans ISO C++ et vice versa. –
@thomas: Y a-t-il un moyen de le changer en ISO C++? Je voudrais que le code écrit pour que quelqu'un travaille dans l'autre machine. Ceux qui n'impliquent pas les appels système au moins. – tomkaith13
g ++ n'utilise pas ISO C++ par défaut, il utilise ISO avec les extensions GNU. Si vous voulez le C++ standard, utilisez le drapeau -pedantic (et alors le VLA échouera sur gcc, puisqu'il est non-standard). Pour obtenir le standard C++ dans Visual Studio, évitez tout type de projet avec "CLR" dans le nom et utilisez l'option/Za pour désactiver les extensions. –