以下 C 程序:
#include <stdio.h>
int main(void)
{
printf("%u %u %u\n",sizeof "",sizeof(""+0),sizeof(char *));
return 0;
}
1 4 4
在 Linux 上使用 GCC 编译时输出,但在1 1 4
Windows 上使用 Microsoft Visual C++ 编译时输出。GCC 结果是我所期望的。它们不同是因为 MSVC 有错误还是因为sizeof(""+0)
未定义?对于这两种编译器,无论您使用什么字符串文字或整数常量,其行为(即打印的中间值是等于第一个值还是最后一个值)都是相同的。
ANSI C 标准中的相关参考似乎是 6.2.2.1 - Lvalues and function designators:
除非它是 sizeof 运算符的操作数...类型为“类型数组”的左值被转换为类型为“类型指针”的表达式,该类型指向数组对象的初始元素,而不是左值。
在这里,虽然“除外”不应该适用,因为在sizeof(""+0)
数组/字符串文字中是+
not的操作数sizeof
。