Одинарные, двойные кавычки и sizeof('a') в C/C++

Я рассматривал вопрос Одинарные и двойные кавычки в C или C++.Я не мог полностью понять данное объяснение, поэтому написал программу:

#include 
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;
}

Я скомпилировал их, используя как gcc, так и g++, и вот мои результаты:

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  

Вывод g++ имеет смысл мне, и я не сомневаюсь в этом. В gcc, что нужно, чтобы sizeof('a')отличался от sizeof(char)? Есть ли за этим какая-то реальная причина или это просто историческая причина?

Также в C, если charи 'a'имеют разный размер, означает ли это, что когда мы пишем char ch = 'a';, мы делаем неявное преобразование типов?

58
задан Community 23 May 2017 в 12:33
поделиться