【发布时间】:2019-04-17 06:30:52
【问题描述】:
我想实现一个名为PRINT 的宏,它获取零个或多个参数,并执行以下操作:
- 如果它得到零参数 - 什么也不做。
- 如果它得到一个或多个参数 - 像 printf 一样操作。
正如您在下面的代码中看到的那样,我成功地实现了它,但仅以在我们得到零参数的情况下使用空字符串调用 printf 为代价。
有没有一种方法可以在不调用 printf 的情况下处理零参数的情况(当您只想什么都不做时打印一些东西效率不高)?
#include <stdio.h>
#define PRINT(...) printf("" __VA_ARGS__);
int main(){
PRINT();
PRINT("print\n");
PRINT("print number: %d\n", 7);
return 0;
}
输出:
print
print number: 7
【问题讨论】:
-
空的
PRINT()从何而来?从另一个宏? (任何人类程序员都可能直接删除它。) -
Jens Gustedt answered 一个关于检测空参数列表和showed how 的问题。这是相当复杂的。
标签: c macros printf variadic-functions