Maison > développement back-end > C++ > Pourquoi les littéraux entiers excessivement grands en C et C ne sont-ils parfois pas par défaut sur « int » ?

Pourquoi les littéraux entiers excessivement grands en C et C ne sont-ils parfois pas par défaut sur « int » ?

Patricia Arquette
Libérer: 2024-12-07 17:47:14
original
502 Les gens l'ont consulté

Why Do Excessively Large Integer Literals in C and C   Sometimes Not Default to `int`?

Litéraux entiers : pas toujours int par défaut

Lors d'une itération en boucle, des littéraux entiers trop grands peuvent entraîner des problèmes inattendus. Normalement, les littéraux sans suffixes sont interprétés comme des int. Cependant, cette hypothèse peut ne pas être valable pour de très grandes valeurs.

Débordement et promotion

Lorsqu'un littéral entier dépasse la plage de int (généralement 32 bits), non défini un comportement (UB) peut en résulter. Cependant, dans certains cas, le compilateur peut automatiquement promouvoir le littéral vers un type plus grand, tel que long int (qui est généralement de 64 bits).

Spécifications standard

Les normes C et C réglementent la promotion des littéraux entiers aux valeurs appropriées. types.

  • C: La section 6.4.4.1 de la norme C99 indique que le type littéral est le premier répertorié dans lequel sa valeur peut être représentée (c'est-à-dire int, long int , long long int) ou un type entier étendu si nécessaire.
  • C : Section [lex.icon] Le paragraphe 2 de la norme C 11 spécifie de la même manière la promotion vers long int ou long long int selon les besoins.

Exemple

Considérez l'entier littéral 10000000000. Dans un environnement C, cela serait interprété comme un entier long. Cependant, si le compilateur utilisé est un compilateur 32 bits, cela pourrait entraîner une erreur de compilation car le littéral est trop grand pour les types entiers disponibles.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal