Tableaux de longueur variable en C : exploration de la constance et de la conformité aux normes
L'extrait de code C ci-dessous a soulevé des questions quant à savoir s'il adhère au langage standard, notamment concernant les expressions constantes :
int main() { int size = 10; int arr[size]; }
Dans le Standard C (8.3.4/1), le la taille d'un tableau doit être une "expression constante intégrale". La taille, dans l'exemple ci-dessus, semble manquer de cette propriété.
Tableaux de longueur variable (VLA) et état de compilation
Le code se compile avec succès avec gcc 4.8 et Clang 3.2. car les deux compilateurs prennent en charge les tableaux de longueur variable (VLA) comme extension en C . Toutefois, Visual Studio CTP rejette le code avec un message d'erreur suggérant que la taille est nulle. Ce comportement est conforme à la norme C, qui n'autorise pas les tableaux de taille variable.
Avertissements du compilateur et extensions de langage
Certains compilateurs, tels que gcc et clang, fournir des avertissements lors de l'utilisation de VLA avec l'indicateur -pedantic. Cet indicateur avertit des fonctionnalités non standard potentielles, indiquant que le code viole la norme C. Dans ce cas, l'absence de taille constante pour le tableau rend l'utilisation de VLA inappropriée.
Expressions constantes intégrales
Expressions constantes intégrales, selon le projet de norme C (5.19 .3), doit répondre à des conditions particulières. Dans ce cas, size étant initialisé avec un littéral, il est qualifié d'expression constante intégrale. Cependant, pour se conformer à la norme C, "const" ou "constexpr" doit être utilisé pour le déclarer explicitement comme tel :
const int size = 10;
ou
constexpr int size = 10;
Conclusion
Bien que les réseaux de longueur variable offrent une flexibilité, leur utilisation doit être équilibrée par rapport à la conformité aux normes. Les compilateurs comme Visual Studio adhèrent à la norme C et rejettent le code qui enfreint ses règles. En comprenant le concept d'expressions constantes intégrales et en prenant en compte les extensions de langage, les développeurs peuvent garantir que leur code répond à la fois aux exigences de fonctionnalité et de standardisation.
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!