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(xa) + sizeof(xb) ),但是C的输出不是。 那么, sizeof如何在C中工作呢?

  • C: https : //ideone.com/zj5Qd2
  • C ++: https : //ideone.com/ZZ4v6S

似乎C比本地更喜欢全局variables。 这样对吗?

在C中,像struct x { int a; int b; }; struct x { int a; int b; }; 没有定义typesx ,它定义了一个typesstruct x 。 所以,如果你删除int x; 全球,你会发现C版本不能编译。