Защо размерът на символния литерал в C е различен от този в C++

Знам, че всеки литерал в C и C++ получава специфична информация за типа. Написах тази малка програма на C и я компилирах в Visual Studio 2012. Изходният файл се нарича „main.c“.

#include <stdio.h>
int main()
{
    printf("sizeof(char) = %d\n",sizeof(char));
    printf("sizeof('i') = %d",sizeof('i'));
    getchar();
    return 0;
}

Изход:

sizeof(char) = 1
sizeof('i') = 4

Чудех се, че размерът на символа не е 1 байт. Преименувах изходния файл на 'main.cpp' и сега sizeof('a') върна 1, както се очакваше преди. Така че трябва да има специфична езикова разлика. Защо размерът на char в C е 4 байта, а не 1?


person Skydef    schedule 05.01.2015    source източник
comment
В: Защо размерът на char в C е различен от този в C++? A: Не е.   -  person David Heffernan    schedule 05.01.2015


Отговори (2)


В C 'i' има тип int поради причини за обратна съвместимост. Така sizeof('i') показва размера на int на избраната платформа за компилиране.

В C++, тъй като претоварването направи по-спешно да се избягва даването на изненадващи типове на израза, беше решено да се прекъсне обратната съвместимост и да се даде 'i' тип char.

person Pascal Cuoq    schedule 05.01.2015

Тъй като в C++ типът на символните литерали е char, докато в C е int. Разбира се, самото sizeof(char) е 1 и на двата езика по дефиниция.

person Jon    schedule 05.01.2015
comment
Защо размерът на символния литерал в C е различен от този в C++? Вашият отговор е в C++ типът символен литерал е char, докато в C е int. Предполагам, че основният въпрос на OP е: защо символен литерал е int в C, а не char както в C++. - person ouah; 05.01.2015
comment
@ouah: Не мога да се съглася с това. Въпросът казва защо е размерът на char...., което ясно подчертава погрешно схващане: че символният литерал е от тип char. Човек трябва да изясни това, преди да бъде в позицията да попита защо се случва това. - person Jon; 05.01.2015