出力 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 バイトを除く)
したがって、 の初期化部分はfor1 回実行されますprintf("1")。1文字を のバッファに入れstdoutます。次に、 が評価されるため、条件が評価さ!printf("0");れ、文字が のバッファにprintf("0")入れられ、出力文字数が返されます。つまり、条件が false であり、ループが存在します。0stdout1for
最後にmain、プログラムを終了します。その時点で、stdoutバッファのみがフラッシュされます。
分かりやすく言えば、ありそうもない理由でstdoutが正常に記述できない場合、プログラムは異なる動作をします。
printf("1") では、ステートメントをそのまま実行するためです。次に、printf("0") は画面に 0 を出力し、値 1 を返します。これを否定すると、C では false に等しい値が返されます。そのため、for ループは終了条件を満たして終了します。