2017-03-07 4 views
-1

次のコードで何か変わったことに気がつきました。LinuxのC言語でprintf()が "while(1)"ループより先に実行されない

int main() 
{ 
    printf("Test");  // Section 1 do something here.... 

    while(1) 
    { 
      ; 
    } 
} 

セクション1が最初に実行され、プログラムがwhileループでスタックする必要があります。 しかし、結果は "テスト"が印刷されなかったのですが、whileループにはまってしまいました。なぜセクション1のコードが実行されないのだろうか?

私はstdoutストリームがバッファリングされている(デフォルトのGCCコンパイラでコンパイル)のUbuntu 14.04 LTS

+4

'。 '\ n'を最後に追加してバッファリングされた出力をフラッシュします。それは、ループの前に 'fflush(stdout);を呼び出します。それでも印刷されない場合は、GCCが間違ったコードを生成した場合は再論するでしょう:) – StoryTeller

+3

多くの重複があります。 – paddy

+0

@paddy:最初の1つを選んでください。 – Olaf

答えて

2

上でコードを実行し、したがって、それはそれが改行に到達した後、バッファには何が表示されます。追加:行の後

fflush(stdout); 

printf("Test"); 

は、他の選択肢のためにもthis link参照してください。

+0

代わりに、... close-vote/flagの複製の複製にはお答えください。 – Olaf

0

これが働かなければならない:

#include <stdio.h> 

int main() { 
    printf("Test"); 
    while(1){} 
} 

をコンパイルするには:

gcc file.c 

を実行するには:

バッファリングされているprintf`
./a.out