C では、改行文字を出力するまで出力がターミナルに出力されないことがあります\n
。例えば:
int main()
{
printf("Hello, World");
printf("\n");
return 0;
}
Hello World は次まで出力されませんprintf
(これは、gdb にブレークポイントを設定することでわかります)。誰かがなぜこれが起こるのか、そしてそれを回避する方法を説明できますか?
ありがとう!
これはパフォーマンス上の理由から行われます。コンソールへのデータの受け渡しは (実行速度の点で) 文字単位で行うにはコストがかかりすぎます。これが、改行が出力されるまで出力がバッファリングされる理由です。文字は、出力する時間になるまで配列に収集され、その時点で文字列全体がコンソールに渡されます。次のように、出力を明示的に強制することもできます。
fflush(stdout);
さらに、 setvbuf(3)fflush()
でバッファリング オプションを設定できます。