我注意到使用GCC 4.6编译时,sizeof(Foo)
为0,而sizeof(Bar)
为1。由于在空结构中添加了一个空数组,因此其大小变为0。我原以为两个结构的大小必须相同,现在不太明白发生了什么。
struct Foo
{
char x[];
};
struct Bar {};
sizeof 运算符即使对于一个空类也不会产生 0。
正如您可以在 这里的 MSDN 上看到的那样。
此外,MSDN 还声明:
sizeof 运算符不能与以下操作数一起使用:
C和C++不允许零大小的对象。
gcc支持它们作为扩展。如果您使用正确的选项进行编译,例如
gcc -std=c99 -pedantic -Wall -Wextra
gcc 至少会警告您有关它们的信息;g++ 也有类似的选项。
sizeof
永远不可能是_0_... - K-ballo