I was looking at the question Single quotes vs. double quotes in C or C++. I couldn't completely understand the explanation given so I wrote a program:
#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;
}
I compiled them using both gcc and g++ and these are my outputs:
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
The g++ output makes sense to me and I don't have any doubt regarding that. In gcc, what is the need to have sizeof('a')
to be different from sizeof(char)
? Is there some actual reason behind it or is it just historical?
Also in C if char
and 'a'
have different size, does that mean that when we write
char ch = 'a';
, we are doing implicit type-conversion?