Maison > développement back-end > C++ > Pourquoi `sizeof('a')` renvoie-t-il la taille d'un entier en C, mais pas en C ?

Pourquoi `sizeof('a')` renvoie-t-il la taille d'un entier en C, mais pas en C ?

Barbara Streisand
Libérer: 2024-12-23 14:02:10
original
585 Les gens l'ont consulté

Why Does `sizeof('a')` Return the Size of an Integer in C, but Not in C  ?

Pourquoi Sizeof('a') en C diffère de C

Dans le domaine de la programmation, les types de données jouent un rôle crucial dans la détermination la taille et les caractéristiques des données. Comprendre les nuances entre les différents types de données est essentiel pour une programmation efficace et précise. Une telle différence existe entre C et C dans la représentation des littéraux de caractères.

La question : Pourquoi les littéraux de caractères C sont-ils des entiers ?

En C , la taille de(' a') est évalué à 1, ce qui correspond à la taille d'une variable de caractère (char). Cela correspond à la notion intuitive selon laquelle les caractères littéraux doivent occuper l'espace d'un seul caractère.

Cependant, en C, sizeof('a') renvoie étonnamment la taille d'un entier (int). Ce comportement apparemment contre-intuitif soulève la question : pourquoi les littéraux de caractères C sont-ils traités comme des entiers ?

Aperçu historique : L'évolution du C

Pour faire la lumière sur cette particularité, nous doit se plonger dans l'histoire du C. Le K&R C original, développé par Brian Kernighan et Dennis Ritchie, possédait une caractéristique fondamentale : il était difficile de utiliser une valeur de caractère sans la promouvoir au préalable en entier.

Cette limitation vient du fait que les opérateurs arithmétiques de C attendent des opérandes du même type. Étant donné que les caractères et les entiers étaient des types distincts, leur mélange dans des expressions nécessitait une conversion explicite du caractère en entier.

La solution pragmatique : la représentation unificatrice des caractères

Pour répondre Face à cet inconvénient, les concepteurs du langage C ont adopté une approche pragmatique. Au lieu d'introduire des règles supplémentaires pour forcer les caractères à devenir des entiers, ils ont éliminé la distinction en faisant en premier lieu des constantes de caractère entières. Cela a simplifié le langage et l'a rendu moins sujet aux erreurs.

Constantes à plusieurs caractères : une relique du passé

Un autre facteur historique contribuant à cette décision de conception était le existence de constantes à plusieurs caractères. Ces constantes, indiquées par des séquences de caractères entourées de guillemets simples (par exemple, « abcd »), étaient largement utilisées dans les anciennes versions de C. Permettre aux constantes de caractères d'être des entiers leur permettait de s'adapter à la taille d'un entier, fournissant ainsi une représentation cohérente pour les deux. constantes à un ou plusieurs caractères.

Conclusion

Ainsi, apparemment le comportement anormal des littéraux de caractères C étant des entiers trouve ses racines dans l'évolution historique du langage. La recherche de simplicité et d'efficacité a conduit à un choix de conception qui a persisté malgré l'introduction de systèmes de types plus sophistiqués dans les versions ultérieures du langage.

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