2009-12-15 3 views
2

Pourquoi n'y a-t-il pas de littéraux courts dans 'C'?littéraux courts en C

+1

voir http://stackoverflow.com/questions/1329163/ comment-écrire-un-non-signé-court-int-littéral –

+0

Je l'avais regardé à l'avance. Merci pour le pointeur cependant. Il est mentionné que les littéraux courts ne peuvent pas être déclarés. Pourquoi n'est pas mentionné. Je me demandais s'il y avait une certaine motivation pour le concepteur de la langue de ne pas l'avoir et si oui, quel était-il. –

+0

@Abhijith, vous devriez éditer votre question au lieu de la commenter. –

Répondre

6

Cela n'a pas de sens d'avoir un littéral int court dans C puisque toutes les expressions entières sont évaluées comme si les sous-expressions avaient au moins la taille int.

5

Alternativement: Parce qu'ils ne sont pas nécessaires!

Les types de données de différentes tailles sont nécessaires pour bien s'intégrer au matériel sous-jacent et/ou pour économiser l'espace de stockage, mais les littéraux sont une construction de compilation qui est stockée dans les structures de données appropriées.

C'est différent avec float par rapport à double parce que le même nombre a réellement une représentation interne différente dans ceux - plus différents, de toute façon, que quelques zéros seulement.

De même, il y a une différence entre char et short même si elles peuvent être stockées dans les mêmes bits: Si le programmeur parle de données de caractère, il sera généralement plus commode pour lui de préciser, par exemple, 'A' que 65.

Mais un court 99 et un int 99 se ressemblent au programmeur, sont traités de la même manière dans le programme ... le type plus large fera facilement le travail des deux.

+0

"il sera généralement plus pratique pour lui de spécifier, disons," A "que 65". Bien qu'en C, les littéraux de caractère ne sont pas réellement 'char', ils sont' int' aussi.Donc 'A' est une bonne manière portable d'exprimer "la valeur entière du caractère A dans le jeu de caractères de base", mais il n'interagit pas avec le système de type de la manière dont le questionneur veut vraisemblablement partir d'un littéral court. –

1

Si nous parlons original la conception du langage, rappelez-vous que C a obtenu la plupart de sa forme actuelle sur le processeur PDP-11, qui est de 16 bits. Ils avaient donc des entiers pour l'arithmétique et des caractères pour le stockage de chaînes. Les pointeurs étaient fondamentalement les mêmes que les entiers.

La langue était très pragmatique et seulement plus tard a obtenu une syntaxe plus formelle et plus complexe. Donc, la réponse est, il est juste arrivé à être de cette façon. Beaucoup plus tard, nous avons eu des processeurs 32 bits et 64 bits et la nécessité de distinguer entre les entiers de différentes longueurs. À ce jour, je code presque tous mes programmes C comme s'il n'y avait pas d'autre type que char et entier. Oh, au fait, "char" en C peut être signé et non signé selon la norme. Cela reflète que les caractères étaient destinés au stockage de caractères (chaînes de caractères) et à l'arithmétique.

Pour clarifier, (merci semaj) le compilateur peut choisir de traiter une variable déclarée "char" comme "unsigned char". Cela n'arrive pas pour un "int". Un "int" est toujours signé, mais avec les caractères vous ne pouvez pas être sûr. Vous devez supposer qu'un caractère peut avoir une arithmétique non signée ou signée. Il s'agit d'une optimisation de la vitesse pour gérer les processeurs qui fonctionnent plus rapidement avec l'une ou l'autre des implémentations. C'est à dire. l'accent est mis sur les caractères comme des conteneurs de stockage, pas comme un type arithmétique. (Son nom est aussi un cadeau, il aurait pu être appelé "court" ou "petit", mais a été appelé "char" pour une raison.)

+0

J'ai peur que tu m'as perdu. En quoi le fait qu'un caractère puisse être signé ou non signifie-t-il qu'il était destiné au stockage de caractères lorsqu'un int peut également être signé ou non signé? – semaj

+0

Réponse mise à jour. Merci. –

Questions connexes