Pourquoi C de caractères littéraux entiers au lieu de caractères?

En C++, sizeof('a') == sizeof(char) == 1. Cela semble logique, puisque 'a' est un caractère littéral, et sizeof(char) == 1 tel que défini par la norme.

En C cependant, sizeof('a') == sizeof(int). C'est, il semble que C les chaînes de caractères sont en fait des entiers. Quelqu'un sait-il pourquoi? Je peux trouver beaucoup de mentions de ce C caprice mais pas d'explication pour pourquoi il existe.

  • sizeof serait juste de retour de la taille d'un byte ne serait-il pas? Ne sont pas un char et int de la même taille?
  • C'est probablement le compilateur (et de l'architecture) à charge. Soin de dire ce que vous utilisez? La norme (au moins jusqu'à '89) a été très lâche.
  • pas de. un char est toujours de 1 octet grand, donc sizeof('a') == 1 toujours (en c++), tandis qu'un int peut théoriquement être sizeof de 1, mais cela nécessiterait un octet ayant au moins 16 bits, ce qui est très rare 🙂 donc sizeof('a') != sizeof(int) est très probablement en C++ dans la plupart des implémentations
  • ... alors qu'il est toujours mal en C.
  • 'a' est un int en C - période. C y suis arrivé du premier C fait les règles. C++ a changé les règles. Vous pouvez argumenter que le C++ règles plus de sens, mais le changement de la C règles permettrait de faire plus de dégâts que de bien, de sorte que le C standard comité judicieusement n'a pas touché cette.
  • Jonathan, juste pour être clair, mon "c'est toujours mal au C" n'est pas à dire que C est toujours mal:), cela signifie que sizeof('a') == sizeof(int) est toujours vrai dans C . votre commentaire ressemble vous un commentaire sur quelque chose je l'ai dit dans mon commentaire 🙂