我正在为shell命令编写C代码。一个简单的命令,连接到服务器并发送/接收一些基本数据。我采用了不同的选项,如-l -z等
我想要做的是为切换详细程度的命令添加-v选项。例如,如果我给出-v选项,它将打印每个细节,例如“连接到......”,“监听端口”等。
现在我不希望if / else逻辑靠近每个printf语句(我有100个)。我想要的是一个宏/用户定义的函数说new_print将采用详细标记(如果我给-v选项,则为1)和要打印的字符串。如果该标志为0,则不会打印该语句。
请您提供一些相同的例子
答案 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);