Est-ce que "taille int = 10 ;" une expression constante ?
L'extrait de code :
int main() { int size = 10; int arr[size]; }
soulève des questions quant à savoir si le tableau de longueur variable (VLA) est une fonctionnalité C valide.
Le point de vue de la norme
La norme C (8.3.4/1) exige que la taille des tableaux soit expressions constantes intégrales, dont la « taille » ne semble pas être. Les compilateurs comme GCC et Clang acceptent ce code en raison de leur prise en charge des VLA en tant qu'extension en C . Visual Studio, adhérant à la norme, le rejette.
Tableaux de longueur variable
Les VLA sont une fonctionnalité C99 qui autorise des tableaux avec des tailles déterminées dynamiquement. GCC et Clang étendent cette fonctionnalité à C . Cependant, les VLA ne font pas partie du standard C et l'utilisation de l'indicateur -pedantic dans GCC/Clang générera des avertissements ou des erreurs.
Expressions constantes intégrales
Selon le Projet de norme C (5.19/3), une expression constante intégrale est une expression d'un type d'énumération intégrale ou sans portée, implicitement convertie en une prvalue, qui satisfait aux critères d'une expression constante de base.
Faire de « taille » une expression constante
Pour adhérer à la norme, la « taille » doit être déclarée une expression constante intégrale . Ceci peut être réalisé en :
Conclusion
L'acceptation par GCC et Clang de Les VLA sont une extension et non une fonctionnalité standard en C . Le rejet de Visual Studio est conforme à la norme. Pour utiliser les fonctionnalités de type VLA dans le C standard, il est recommandé d'utiliser const ou constexpr pour que les tailles de tableau intègrent des expressions constantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!