我想实现一个名为 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
最佳答案
在传递空格式字符串的情况下,gcc 和 clang 将完全消除对 printf
的调用。可能这种优化相当普遍。
参见 here和 here在 gcc.godbolt.org 上进行反汇编。
总之,不用担心。
关于c - 实现格式化打印,在没有参数时可以不做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297695/