【问题标题】:Implementing the verbose option for my shell command为我的 shell 命令实现详细选项
【发布时间】:2013-09-27 23:13:01
【问题描述】:

我正在为 shell 命令编写 C 代码。连接到服务器并发送/接收一些基本数据的简单命令。我采用不同的选项,例如 -l -z 等

我想要做的是为切换详细程度的命令添加一个 -v 选项。例如,如果我给出 -v 选项,它将打印每个细节,例如“连接到..”、“正在侦听端口”等。

现在我不希望每个 printf 语句附近都有 if/else 逻辑(我有 100 个)。我想要的是一个宏/用户定义的函数说 new_print 它将采用详细标志(如果我给出 -v 选项,则为 1 )和要打印的字符串。如果标志为 0 ,则不会打印该语句。

你能提供一些相同的例子吗

【问题讨论】:

    标签: c verbose


    【解决方案1】:

    您可以使用可变长度参数格式对 printf 进行自己的“重新实现”,因此它的工作方式与 printf 非常相似,但也可以使用您的标志,类似于:

    void verbPrintf(bool verbosity, const char *format, ...)
    {
        // va_list is a special type that allows hanlding of variable
        // length parameter list
        va_list args;
        va_start(args, format);
    
        // If verbosity flag is on then print it
        if (verbosity)
            vfprintf (stdout, format, args);
        else
            // Do nothing
    }
    

    然后只需使用它来替换您的代码中的 printf。例如

    verbPrintf(verbosity, "my verb print %i\n", 5);
    

    【讨论】: