为什么从sizeof运算符调用时不调用printf

时间:2018-06-08 05:58:58

标签: c

char fun()
{
 char c = 'A';
 printf("Hello World");
 return c;
}

main()
{
 printf("%d", sizeof(fun()));
}

该程序的输出是:1 但我的期望是:Hello World1

怎么了?

2 个答案:

答案 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运算符也会起作用。