Printf返回值没有return语句

ano*_*_16 -1 c return

在3个不同的系统上尝试过:CentOS,Ubuntu和Windows(MinGW); 所以我不认为这是一个异常(未定义的行为)

int hello(void)
{
        (void)printf("HELLO WORLD\n");
}

int main(void)
{
        printf("%d\n",hello());
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

你好世界
12

即使使用不同的文本,它也会返回正确的值.有什么解释吗?

Sou*_*osh 5

是的,这 未定义的行为.

如果到达结尾},没有a return,则使用返回值为UB.

C11章节§6.9.1开始,函数定义

如果}终止了函数,并且调用者使用了函数调用的值,则行为是未定义的.

你不应该真的试图通过看到UB的结果来判断 UB.毕竟,这是不确定的.