为我的shell命令实现详细选项

时间:2013-09-23 06:12:10

标签: c verbose

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

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

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

请您提供一些相同的例子

1 个答案:

答案 0 :(得分:3)

你可以做自己的"重新实施" printf使用可变长度的aruguments格式,因此它的工作方式与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);