如果条件在c中起作用,为什么在printf里面?

Jat*_*tin 0 c printf if-statement

if(printf("Hello world")){}
Run Code Online (Sandbox Code Playgroud)

上面代码的输出是

Hello world
Run Code Online (Sandbox Code Playgroud)

我的朋友告诉我,函数printf返回的字符长度在此处非零,因此条件为true。

但是我不明白为什么它要执行该printf语句。不应该仅在内部将printf执行{ }吗?

Bat*_*eba 6

表达式中的if(表达)始终评估,你的情况这是一个呼叫printf

此表达式的值用于确定的主体(在您的情况下为空白)if是否运行。