2015-07-19 190 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,我找到了解决办法。

它们确实提供了在构建项目时禁用调试打印的预定义方式,所以我不得不重新构建它,并且它工作正常。

应该已开始出现......

感谢