c++ - 选择性抑制输出到终端 C++。

标签 c++ terminal argc

我有一堆 .cpp 文件,它们一起处理相似但大小不同的数据文件。对于较大的数据文件,我想对 .cpp 文件中的函数进行一些时序研究。

我想抑制输出这些大数据集的结果,只打印计时结果。对于较小的数据集,我想打印到屏幕上以验证算法/代码的正确性。

与其反复注释/取消注释适当的 cout 语句并重新编译,我更愿意使用命令行参数(或其他一些技术)来有选择地抑制输出。

有什么建议吗?我能想到的最简单的方法是使用 argcargv,但我不确定它们是否是可以跨不同文件的函数使用的全局变量。

最佳答案

您的直觉是正确的——使用传递到您的main 函数中的argcargv 值——但它们不是全局变量。您需要以某种方式使您的信息全局化:我建议对参数进行一次解析,并保留一组可以轻松查询的全局标志。

例如:

// In a common header file that gets included in each source file
extern bool g_bFlag1;
extern bool g_bFlag2;
...

// In your main source file
bool g_bFlag1 = false;
bool g_bFlag2 = false;
...
int main(int argc, char **argv)
{
    // Parse command line and store results in global flags
    for (int i = 1; i < argc; i++)
    {
        if (strcmp(argv[i], "--flag1") == 0)
            g_bFlag1 = true;
        else if (strcmp(argv[i], "--flag2") == 0)
            g_bFlag2 = true;
        else
            ;  // etc.
    }
}

// In any other source file:
if (g_bFlag1)
{
    // do stuff if and only if g_bFlag1 is set
}

然后你可以在命令行中传递--flag1。对于更复杂的参数解析,我建议使用诸如 GNU getopt 之类的库.

关于c++ - 选择性抑制输出到终端 C++。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492448/

相关文章:

c - 给定的文件参数是否是目录。 C

c - argc 和 argv 没有运行

c++ - 制作一个长函数内联

c++ - 数独递归,接受零为合法

terminal - 如何在Sublime Text 3中打开iTerm?

c - 如何修复我的 pthread 代码遇到的此错误?

linux - mac/linux 上的 zip 命令选项

c - 打印 mpiexec 参数而不是正在执行的程序的参数

c++ - 可以将 std::streambuf 的自定义实现中的异常传递给流用户吗?

c++ - 在单元测试时操作迭代器