我正在为shell命令编写C代码。一个简单的命令,连接到服务器并发送/接收一些基本数据。我采取不同的选项,如 -l -z 等
我想做的是为用于切换详细程度的命令添加一个 -v 选项。例如,如果我给出-v选项,它将打印每个细节,例如"连接到..","侦听端口"等。
现在我不希望每个 printf 语句附近都有 if/else 逻辑(我有 100 个)。我想要的是一个宏/用户定义的函数,比如说new_print它将采用详细标志(如果我给出 -v 选项,则为 1)和要打印的字符串。 如果标志为 0 ,则不会打印语句。
您能否提供一些相同的示例
您可以使用可变长度的 aruguments 格式对 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 %in", 5);