C vs С++ sizeof

Я просто наткнулся на этот простой фрагмент кода и задаюсь вопросом, почему вывод этой программы при компиляции компилятором C составляет 4, а когда он скомпилирован с помощью С++, это 8.

#include <stdio.h>

int x;

int main(){
    struct x {int a; int b;};
    printf("%d", sizeof(x));
    return 0;
}

Вывод С++ является рациональным (8 = 4 + 4 = sizeof(x.a) + sizeof(x.b)), но вывод C не является. Итак, как работает sizeof в C?

Кажется, что C предпочитает глобальные переменные по локальным. Правильно?

Ответ 1

В C определение структуры, подобное struct x { int a; int b; };, не определяет тип x, он определяет тип struct x. Поэтому, если вы удалите глобальный int x;, вы обнаружите, что версия C не компилируется.