web-dev-qa-db-ja.com

条件としてのwhile()のprintf()が異なる出力を印刷する理由

最初のコード

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

出力としてHelloのみを生成します

2番目のコード

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

2番目のコードは、Helloを無限に出力します。

3番目のコード

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

3番目のコードもHelloを無限に出力します。

使用されているコンパイラ-GCC 9.0.1

なぜこれが起こっているのですか?

5
Mayur Fartade

最初のコード:

printf("Hello")は、文字数を返します。

printf("Hello")をwhileループ内で使用すると、Helloが出力され、5が返されます。

0より大きいため、whileループはこれをtrueと見なし、while以下のステートメント、つまり_return 0_を実行します。

_return 0_は、main関数が0を返し、実行を停止するようにします。

コード

_while(printf("Hello"))
    return 0;
_

と同じ

_while(printf("Hello"))
{
    return 0;
}
_

2番目のコード:

while()の後に_;_を使用したため、_;_の後のステートメントは実行されません。したがって、ステートメント_return 0_は実行されず、whileは条件を無限回チェックして、無限のHelloを出力します。

番目のコード:

は、_{ }_内でのみステートメントを実行します。

ステートメントを検索した後は毎回空なので、戻って状態をチェックします。

条件は常にtrueであるため、_return 0_に到達せず、Helloを無限に出力します。

1
Ajanyan Pradeep