C 与 C++

C vs C++ sizeof

我刚看到这个简单的代码片段,我想知道为什么这个程序由 C 编译器编译时的输出是 4,而当它由 C++ 编译时输出是 8

#include <stdio.h>

int x;

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

C++ 输出是有理数 (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 版本无法编译。