2017-03-07 174 views
-1

我注意到下面的代碼有些奇怪。Printf()在Linux中的C語言中的「while(1)」循環之前未執行

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

    while(1) 
    { 
      ; 
    } 
} 

第1節,應先執行,然後該程序應該陷入while循環。 但結果是「測試」沒有得到打印,但它陷入了while循環。我想知道爲什麼第1部分的代碼沒有被執行?

我跑在Ubuntu 14.04 LTS的stdout流緩衝的代碼(使用默認的gcc編譯器編譯)

+4

'printf'緩衝。在結尾添加一個'\ n'以清除緩衝的輸出。或者在循環之前調用'fflush(stdout);'。如果它仍然沒有打印,我們將重新討論GCC是否產生不正確的代碼:) – StoryTeller

+3

這麼多副本......選擇哪一個? – paddy

+0

@paddy:選擇第一個。 – 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 

要執行:

./a.out