C/C++/Qt屏蔽输出流技巧

教大家如何屏蔽printf,cout,qDebug等打印信息。

1. MSVC编译器

  • 将两个“/”连接成“//”实现注释是MSVC编译器扩展功能。

    1
    2
    3
    #define cout /##/
    #define printf /##/
    #define qDebug /##/
  • 启用宏替换后变为注释语句

    1
    2
    printf("Hello world!");
    相当于: //("Hello world!")
1
2
cout << "Hello world!"; 
相当于: // <<("Hello world!")
1
2
qDebug() << "Hello world!"; 
相当于: // <<("Hello world!")

2. 直接关闭流

2.1 POSIX标准的编译器

1
2
#include <unistd.h>
close(STDOUT_FILENO);

2.2 调用stdio标准库

  • 注意:调用fclose()之后对流的任何使用导致了未定义的行为,不建议使用。
    1
    2
    #include <stdio.h>
    fclose(stdout);

2.3 使用注意

  • 关闭输出流后下列类似的打印将不会输出
  • 注意:关闭输出流后没有方法重新为它打开。
    1
    2
    3
    printf("Hello world!");
    cout << "Hello world!";
    qDebug() << "Hello world!";

3. Qt库实现

  • 在Qt项目文件添加以下定义:
  1. 屏蔽qInfo()

    1
    DEFINES += QT_NO_INFO_OUTPUT
  2. 屏蔽qDebug()

    1
    DEFINES += QT_NO_DEBUG_OUTPUT
  3. 屏蔽qWarning()

    1
    DEFINES += QT_NO_WARNING_OUTPUT

关于更多

  • 公众号后台回复”技巧“获取相关文章。