58 votes

Guillemets simples et doubles en C/C++

Je regardais la question Guillemets simples et guillemets doubles en C . Je ne comprenais pas complètement l'explication donnée, alors j'ai écrit un programme

#include <stdio.h>
int main()
{
  char ch = 'a';
  printf("sizeof(ch) :%d\n", sizeof(ch));
  printf("sizeof(\'a\') :%d\n", sizeof('a'));
  printf("sizeof(\"a\") :%d\n", sizeof("a"));
  printf("sizeof(char) :%d\n", sizeof(char));
  printf("sizeof(int) :%d\n", sizeof(int));
  return 0;
}

Je les ai compilés en utilisant à la fois gcc et g++ et voici mes résultats

gcc :

sizeof(ch)   : 1  
sizeof('a')  : 4  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

g++ :

sizeof(ch)   : 1  
sizeof('a')  : 1  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

La sortie de g++ est logique pour moi et je n'ai aucun doute à ce sujet. Dans gcc, quel est le besoin d'avoir sizeof('a') pour être différent de sizeof(char) . Y a-t-il une raison réelle derrière cela ou est-ce simplement historique ?

Également en C si char y 'a' ont une taille différente, cela signifie-t-il que lorsque nous faisons char ch = 'a'; nous faisons une conversion de type implicite ?

61voto

Daniel Fischer Points 114146

En C, les constantes de caractères telles que 'a' avoir le type int en C++, c'est char .

En ce qui concerne la dernière question, oui,

char ch = 'a';

entraîne une conversion implicite de l int a char .

1voto

ucefkh Points 457

Parce qu'il n'y a pas de personnage mais seulement des intgers liés à un personnage

comme a est 62 je suppose

si vous essayez printf("%c",62) ; vous verrez un caractère

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X