2015-07-19 168 views
1

我正在使用外部庫 - portaudio.h - 在我的項目中,它的一個函數pa_initialize()向控制檯輸出了大量信息垃圾。Portaudio:防止打印到控制檯c

它可以幫助我調試我的項目,但是當我介紹它時會有問題。

我無法訪問庫並對其進行編輯。

有沒有辦法阻止我的代碼的特定功能或特定部分打印到控制檯?

我上的Visual Studio 2013年

回答

-2

C編寫您可以創建日誌內搭一個布爾標誌,你可以設置和取消功能。

例如

boolean printOnConsole= false; 

void printLog(boolean flag, String data) 
{ 

    if(flag) 
      //print yor data on console 
} 
+0

他說,他「[不]訪問庫和編輯它。」 – rdtsc

+0

我可以通過這種方式禁用我的整個項目中的打印嗎? – yagev

+0

是的,你可以,全球範圍內設置你的國旗 – CodingRat

0

pa_initialize可寫入stdoutstderr。您可以簡單地通過關閉這些流來停用它們。重新激活是問題,因爲解決方案不是交叉編譯器。下面爲我​​工作與MinGW64:

#include <stdio.h> 

int main(){ 
    puts("Hello world!"); 
    fclose(stdout); 
    puts("Should not be printed."); 
    freopen("CON", "w", stdout); 
    puts("Hello again!"); 
    return 0; 
} 

世界,你好!

你好!

對於MSVC,下面的stdio.h一部分應該對你是很有意思:

_CRTIMP FILE * __cdecl __iob_func(void); 

... 

#define stdin (&__iob_func()[0]) 
#define stdout (&__iob_func()[1]) 
#define stderr (&__iob_func()[2]) 
+0

MSVC'fopen' wrapps [CreateFile2](https://msdn.microsoft.com/zh-cn/library/windows/desktop/hh449422%28v=vs.85 %29.aspx),包括設備的特殊文件名(見下文)。還有「CON」。 – Youka

1

好了,經過重新閱讀portaudio documentation,我找到了解決辦法。

它們確實提供了在構建項目時禁用調試打印的預定義方式,所以我不得不重新構建它,並且它工作正常。

應該已開始出現......

感謝