Einfache, doppelte Anführungszeichen und sizeof(a) in C/C++

Einfache, doppelte Anführungszeichen und sizeof(a) in C/C++


Ich habe mir die Frage Einfache Anführungszeichen vs. doppelte Anführungszeichen in C oder C++ angesehen. Ich konnte die gegebene Erklärung nicht ganz verstehen, also schrieb ich ein Programm:


#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;
}

Ich habe sie mit gcc und g++ kompiliert und das sind meine Ausgaben:


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

Die Ausgabe von g++ macht für mich Sinn und daran habe ich keinen Zweifel. In gcc, was ist die Notwendigkeit, sizeof('a') zu haben sich von sizeof(char) unterscheiden ? Gibt es einen tatsächlichen Grund dafür oder ist es nur historisch?


Auch in C, wenn char und 'a' unterschiedliche Größe haben, heißt das, wenn wir
char ch = 'a'; schreiben , führen wir eine implizite Typkonvertierung durch?


Antworten:


In C Zeichenkonstanten wie 'a' Typ int haben , in C++ ist es char .


Bezüglich der letzten Frage, ja,


char ch = 'a';

bewirkt eine implizite Konvertierung des int bis char .


Einige Code-Antworten


#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;
}
sizeof(ch)   : 1   sizeof('a')  : 4   sizeof("a")  : 2   sizeof(char) : 1   sizeof(int)  : 4   
sizeof(ch)   : 1   sizeof('a')  : 1   sizeof("a")  : 2   sizeof(char) : 1   sizeof(int)  : 4   
char ch = 'a';