Ответ 1
В C определение структуры, подобное struct x { int a; int b; };
, не определяет тип x
, он определяет тип struct x
. Поэтому, если вы удалите глобальный int x;
, вы обнаружите, что версия C не компилируется.
Я просто наткнулся на этот простой фрагмент кода и задаюсь вопросом, почему вывод этой программы при компиляции компилятором 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 предпочитает глобальные переменные по локальным. Правильно?
В C определение структуры, подобное struct x { int a; int b; };
, не определяет тип x
, он определяет тип struct x
. Поэтому, если вы удалите глобальный int x;
, вы обнаружите, что версия C не компилируется.