2017-05-01 195 views
-1

我有這個宏和這個主要功能。C調試打印宏不打印

#define DEBUG_INFO(format, args...) \ 
     fprintf(stdout, "%12s: %3d: %s ", __FILE__, __LINE__, green), \ 
     fprintf(stdout, format, ##args) 


int32_t main() 
{ 
    if (server_init()) 
    { 
     DEBUG_INFO("Child process wasnt created"); 
    } 
    return 0; 
} 

當我的主要功能開始工作。它將返回server_init()的值。我也在server_init()中使用了DEBUG_INFO。宏觀線後。在server_init()中,宏沒有寫任何東西。但是,如果server_init()返回False值。那麼主函數的宏將寫入錯誤。爲什麼不能在函數中使用宏。

+0

您需要使用'\ n'或使用'fflush'刷新輸出緩衝區。 –

+0

在消息字符串的末尾添加一個換行符,或者在宏的末尾添加'putchar('\ n')'強制添加一行(在另一個逗號操作符之後),或者...您確定這是一個好主意將調試信息寫入標準輸出?使用標準錯誤更爲常規,並且「stderr」通常沒有完全緩衝(因此它是行緩衝或無緩衝的),並最大限度地減少了消息不出現的風險。 –

回答

1

您可以撥打setbuf(stdout, NULL)來禁用stdout上的輸出緩衝,或者您可以直接輸出\n來刷新輸出緩衝區。第二種選擇是可取的。