Pratt Pratt - 2 months ago 11
C Question

Single, double quotes and sizeof('a') in C/C++

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?

Answer

In C, character constants such as 'a' have type int, in C++ it's char.

Regarding the last question, yes,

char ch = 'a';

causes an implicit conversion of the int to char.