Подтвердить что ты не робот

Почему эта программа отличается от C и С++?

Возможный дубликат:
Размер символа ('a') в C/С++

Следующая программа

#include <stdio.h>

int main()
{
    printf("%d\n", sizeof('\0'));
    printf("%d\n", sizeof(0));
}

скомпилирован с выходами gcc

4
4

и с g++

1
4

Почему это происходит? Я знаю, что это не компилятор, а разница между C и С++, но какая причина?

4b9b3361

Ответ 1

В C символьные константы имеют тип int в соответствии с 6.4.4.4 (10) стандарта,

Целочисленная символьная константа имеет тип int. Значение целочисленной символьной константы содержащий один символ, который сопоставляется однобайтовому символу выполнения, является числовое значение представления отображаемого символа, интерпретируемого как целое число.

Таким образом, вы дважды печатаете размер int.

В С++ символьные константы имеют тип char.

Ответ 2

Литеральный символ \0 рассматривается как int в C, поэтому вы фактически печатаете sizeof(int) вместо sizeof(char).

ideone дает те же результаты (C, С++).

Ответ 3

В C символьных литералах есть ints. В С++ это символы.

Ответ 4

Вывод уже зависит от компилятора, так как вы используете неверный спецификатор формата для size_t, это будет %zu. В 64-разрядных системах с size_t шире, чем int это может дать вам любой вид мусора.

В противном случае это условие зависит от компилятора. Оба значения, которые вы пытаетесь напечатать, являются int в C и char и int в С++. Таким образом, в C это обычно дает вам 4 4 или 8 8 и в С++ 1 4 или 1 8.