En C++, les tableaux de longueur variable ne sont pas légaux. G++ le permet en tant qu'"extension" (parce que le C le permet), donc dans G++ (sans être -pedantic
sur le respect de la norme C++), vous pouvez le faire :
int n = 10;
double a[n]; // Legal in g++ (with extensions), illegal in proper C++
Si vous voulez un "tableau à longueur variable" (mieux appelé "tableau à taille dynamique" en C++, puisque les tableaux à longueur variable ne sont pas autorisés), vous devez soit allouer dynamiquement de la mémoire vous-même :
int n = 10;
double* a = new double[n]; // Don't forget to delete [] a; when you're done!
Ou, mieux encore, utilisez un récipient standard :
int n = 10;
std::vector<double> a(n); // Don't forget to #include <vector>
Si vous souhaitez tout de même un véritable tableau, vous pouvez utiliser un fichier constant et non un variable lors de sa création :
const int n = 10;
double a[n]; // now valid, since n isn't a variable (it's a compile time constant)
De la même manière, si vous souhaitez obtenir la taille d'une fonction en C++11, vous pouvez utiliser la fonction constexpr
:
constexpr int n()
{
return 10;
}
double a[n()]; // n() is a compile time constant expression