0

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

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

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

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

4

1 回答 1

3

您可以使用可变长度参数格式对 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);
于 2013-09-23T06:23:50.603 回答