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 ?