char fun()
{
char c = 'A';
printf("Hello World");
return c;
}
main()
{
printf("%d", sizeof(fun()));
}
该程序的输出是:1
但我的期望是:Hello World1
怎么了?
答案 0 :(得分:2)
声明
printf("%d", sizeof(fun()));
fun()
未被调用,因为sizeof()
未评估或计算其中的内容。它只返回size
字节,即所需的字节数。它在编译时解决了。因此hello world
不会被打印出来。
来自 C99 标准
6.5.3.4/2
sizeof运算符产生其操作数的大小(以字节为单位) 可以是表达式或类型的带括号的名称。大小是 根据操作数的类型确定。结果是整数。如果 操作数的类型是可变长度数组类型,操作数 被评估;否则,不评估操作数和结果 是一个整数常量。
并且 sizeof()
如何知道其返回值的大小是1?从 C99 标准部分 6.5.3.4 检查强>。它说
sizeof运算符不应用于具有的表达式 功能类型或不完整类型。
答案 1 :(得分:2)
sizeof
运算符不会调用该函数,而是根据表达式的类型进行操作。在这种情况下,它是char
,因此您获得1作为值。即使未定义函数,sizeof
运算符也会起作用。