出力 10 が来る理由を説明してください。
main()
{
for(printf("1");!printf("0");printf("2"))
{
printf("hello");
}
}
出力:
10
出力 10 が来る理由を説明してください。
main()
{
for(printf("1");!printf("0");printf("2"))
{
printf("hello");
}
}
出力:
10
そのprintf(3) man ページによると、printf
関数は戻ります
印刷される文字数 (文字列への出力を終了するために使用される null バイトを除く)
したがって、 の初期化部分はfor
1 回実行されますprintf("1")
。1
文字を のバッファに入れstdout
ます。次に、 が評価されるため、条件が評価さ!printf("0");
れ、文字が のバッファにprintf("0")
入れられ、出力文字数が返されます。つまり、条件が false であり、ループが存在します。0
stdout
1
for
最後にmain
、プログラムを終了します。その時点で、stdout
バッファのみがフラッシュされます。
分かりやすく言えば、ありそうもない理由でstdout
が正常に記述できない場合、プログラムは異なる動作をします。
printf("1") では、ステートメントをそのまま実行するためです。次に、printf("0") は画面に 0 を出力し、値 1 を返します。これを否定すると、C では false に等しい値が返されます。そのため、for ループは終了条件を満たして終了します。