Reputation: 861
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:
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
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?
Upvotes: 58
Views: 6580
Reputation: 2531
because there is no char just intgers linked int a character
like a is 62 i guess
if you try printf("%c",62); you will see a character
Upvotes: 1
Reputation: 183878
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
.
Upvotes: 61