【发布时间】:2012-02-24 22:53:48
【问题描述】:
我正在寻找编写我认为是相当常见的宏。我想通过定义以下形式的一堆宏来模拟许多 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",""),但应该有更清洁的解决方案。
【问题讨论】:
-
或者
V1("%s", "Output")怎么样? -
这里似乎不需要宏。使用功能可以更轻松,更简单地完成它。例如,请参阅here。