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

C++CGcc

C++ Problem Overview


I was looking at the question <https://stackoverflow.com/questions/3683602/single-quotes-vs-double-quotes-in-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?

C++ Solutions


Solution 1 - C++

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.

Solution 2 - C++

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPrattView Question on Stackoverflow
Solution 1 - C++Daniel FischerView Answer on Stackoverflow
Solution 2 - C++ucefkhView Answer on Stackoverflow