【问题标题】:macro function for printing打印宏功能
【发布时间】:2010-04-13 10:00:00
【问题描述】:

如果我有:

#define PRINT(x) fprintf(stderr, x);

并在代码中附加它:

 PRINT(("print this")) 

输出是: [打印]

如果我附加它:

 PRINT(("print %s", "this"))

输出是: [这个]

有人能解释一下为什么它只接收“this”参数而不是整个字符串吗?

【问题讨论】:

    标签: c function printing macros


    【解决方案1】:
    PRINT(("print %s", "this"))
    

    变成:

    fprintf(stderr, ("print %s", "this"));
    

    相当于:

    fprintf(stderr, "this");
    

    Howevervariadic macros(来自 C99)工作:

    #define PRINT(...) fprintf(stderr, __VA_ARGS__)
    
    int main() {
      PRINT("print %s", "this");
      return 0;
    }
    

    【讨论】:

    • @seven:你确定你去掉了里面的括号吗?
    • sry,我刚刚看到你没有使用双括号,它可以工作,谢谢。
    • 当不用于函数调用时,逗号运算符通过返回其第二个操作数来工作,并且具有极低的运算符优先级(但高于赋值)。
    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 2014-11-29
    • 2022-01-01
    • 2013-09-02
    • 1970-01-01
    • 2020-01-21
    • 2019-01-18
    • 2015-09-22
    相关资源
    最近更新 更多