【问题标题】:Portaudio: Prevent printing to console in cPortaudio:防止在c中打印到控制台
【发布时间】:2015-07-19 16:45:54
【问题描述】:

我在我的项目中使用了一个外部库 - portaudio.h,它的功能之一是pa_initialize() 会向控制台打印大量信息垃圾。

在调试我的项目时会有所帮助,但在我展示它时会出现问题。

我无法访问该库并对其进行编辑。

是否有任何方法可以阻止此特定功能或我的代码的特定部分打印到控制台?

我在 Visual Studio 2013 上用 C 语言编写。

【问题讨论】:

    标签: c visual-studio-2013 portaudio


    【解决方案1】:

    嗯,重读portaudio documentation后,我找到了解决办法。

    他们确实提供了一种在构建项目时禁用调试打印的预定义方法,所以我不得不重新构建它,它确实有效。

    应该从那里开始......

    谢谢

    【讨论】:

      【解决方案2】:

      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])
      

      【讨论】:

      • MSVC fopen 包装 CreateFile2,包括设备的特殊文件名(见最下方)。还有“CON”。
      【解决方案3】:

      您可以创建一个用于记录的函数,该函数带有一个可以设置和取消设置的布尔标志。

      例如

      boolean printOnConsole= false;
      
      void printLog(boolean flag, String data)
      {
      
         if(flag)
                //print yor data on console
      }
      

      【讨论】:

      • 他说他“[无法]访问和编辑图书馆。”
      • 我可以这样在我的整个项目中禁用打印吗?
      • 是的,你可以,全局设置你的标志
      • ...这有助于以 which 方式输出上游第三方库,究竟是什么? 输出不是他的,它来自 libportaudio。
      猜你喜欢
      • 2020-01-04
      • 2020-03-17
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      相关资源
      最近更新 更多