c - 实现格式化打印,在没有参数时可以不做任何事情

标签 c macros printf variadic-functions

我想实现一个名为 PRINT 的宏,它获取零个或多个参数,并执行以下操作:

  1. 如果它获得零参数 - 什么也不做。
  2. 如果它得到一个或多个参数——就像 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 的调用。可能这种优化相当普遍。

参见 herehere在 gcc.godbolt.org 上进行反汇编。

总之,不用担心。

关于c - 实现格式化打印,在没有参数时可以不做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297695/

相关文章:

c - 例如,git 如何创建他们使用的数据库?

c++ - 在 block 中#defining 真的是一种代码味道吗?

macros - 什么是宏@.来自 Julia,文档在哪里?

perl - 有没有办法让 printf/sprintf 正确处理字符组合?

bash - 使用 printf 时行未正确对齐

将字符串转换为 C 中的表达式

c - 如何将汇编代码关联到 C 程序中的确切行?

将命令行 arg 转换为 double 无法通过 C 中的逻辑检查

c - GCC 对宏中使用的 __builtin 函数的优化

c - 程序在 printf() 上中断