为什么在 while() 中的 printf() 作为条件打印不同的输出

May*_*ade 6 c while-loop

第一个代码

#include<stdio.h>
int main()
{
    while(printf("Hello"))
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Hello作为输出生产

第二个代码

#include<stdio.h>
int main()
{
    while(printf("Hello"));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第二个代码打印Hello无限次。

第三个代码

#include<stdio.h>
int main()
{
    while(printf("Hello"))
    {}
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

第三个代码也打印Hello无限次。

使用的编译器 - GCC 9.0.1

为什么会这样?

PSk*_*cik 10

while结束后发表声明)

6.8.6 迭代语句

 iteration-statement:
                while ( expression ) statement

 ....
Run Code Online (Sandbox Code Playgroud)

while(printf("Hello"))
    return 0;
Run Code Online (Sandbox Code Playgroud)

该陈述(基本上while是 的论点)是return 0;6.8.6

while(printf("Hello"));
Run Code Online (Sandbox Code Playgroud)

该语句是;(空(空)/表达式语句(6.8.3))。

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

它是一个空的复合语句 ( {}, 6.8.2 ),在语义上等同于;.

你的代码片段是误导性空白的例子——空白使人们对事物的理解与编译器不同。

较少误导性的渲染将是:

while(printf("Hello"))
    return 0;
Run Code Online (Sandbox Code Playgroud)

,

while(printf("Hello"))
    ; //or perhaps a {} instead of the null statement
Run Code Online (Sandbox Code Playgroud)

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