web-dev-qa-db-fra.com

Existe-t-il un cas d'utilisation pour utiliser la lettre «L» après un numéro littéral en C?

Je sais que dans le code C à l'aide de L après qu'un nombre indique au compilateur que le nombre respectif est L.

Cependant, je ne vois aucune utilisation pratique pour cela. Les compilateurs modernes ont-ils toujours une utilisation pour cette construction de langue?

S'il y a toujours des cas, quels seraient ces cas?

6
yoyo_fun

Dans les expressions de langue C sont saisies à l'envers: les littéraux ont des types. Par exemple. 123 Est un int, et 123U Est un INT non signé, 123L Est un long int et ainsi de suite. Le type d'expression dépend des types de sous-expressions: le type de a + b Dépend des types de a et b.

S'assurer que le type correct est particulièrement important lors du déroulement des bits. Vous devez également prendre soin de gros littéraux qui ne correspondent pas à un INT (ou le type d'une variable que vous attribuez à la valeur d'expression à - les conversions de rétrécissement sont une source courante de bogues).

Cependant, la plupart des codes ne doivent pas utiliser explicitement un type long type ou le suffixe littéral L [$ var] car la taille des entiers longs dépend de la plate-forme. Les entiers et les entiers longs peuvent même avoir la même taille.

Pour le code portable qui nécessite une taille spécifique, il est plus correct d'utiliser les types d'entiers de largeur fixe C99 (comme int64_t). Ils n'ont pas de suffixes littéraux correspondants, mais vous devez utiliser les macros littérales comme INT64_C(123) à partir de stdint.h. Ces macros appliqueront les suffixes de type CASTS correctes ou dépendant de la plate-forme si nécessaire.

En C++, le type d'expression peut affecter avec les surcharges sont invoqués. Notamment 0, '\0', false _ et nullptr _ se comporte souvent très différemment, malgré tout "null" et dans une certaine mesure implicitement convertible.

14
amon