我正在寻找写我认为是一个相当常见的宏。我想通过定义以下形式的一堆宏来模拟许多 POSIX 程序上重复的“-v”选项:
#define V1(str, ...) if(optv >= 1){printf("%s: "str,prog,__VA_ARGS__);}
int main(int argc, char* argv[])
{
// ... stuff ...
int i = 1;
V1("This contains a variable: %d\n",i);
}
// Output:
// ./program: This contains a variable: 1
其中optv
计算在命令行中找到的“-v”选项的数量并prog
包含程序名称(均未显示)。这很好用,但问题是我必须使用一个变量。V1("Output")
会产生编译错误。我总是可以使用V1("Output%s","")
,但应该有一个更清洁的解决方案。