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

c, c++, gcc

Solution

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`.

Problem

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?

Original source

Related problems