【问题标题】:What does it mean in C : #define ABC(a,b) {#a, a, b} [duplicate]在 C 中是什么意思:#define ABC(a,b) {#a, a, b} [重复]
【发布时间】:2017-11-17 09:48:19
【问题描述】:

在 C 中是什么意思:#define ABC(a,b) {#a, a, b}?

我知道 ABC 是一个带有参数 (a,b) 的宏。

但是 {#a, a, b} 是什么意思,尤其是在这种情况下“#a”是什么意思?

【问题讨论】:

    标签: c ansi-c


    【解决方案1】:

    这用于进行字符串化。来自manual

    有时您可能希望将宏参数转换为字符串 持续的。参数不会在字符串常量中被替换,但是你 可以改用# 预处理运算符。当一个宏参数 与前导 # 一起使用,预处理器将其替换为 实际参数的文字文本,转换为字符串常量。 与普通参数替换不同,参数不是 首先进行宏观扩展。这称为字符串化。

    手册本身有一个例子说明了这个想法。

    #define WARN_IF(EXP) \
    do { if (EXP) \
            fprintf (stderr, "Warning: " #EXP "\n"); } \
    while (0)
    WARN_IF (x == 0);
     (expanded to)==> do { if (x == 0)
               fprintf (stderr, "Warning: " "x == 0" "\n"); } while (0);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2012-06-14
      • 1970-01-01
      • 2017-02-02
      • 2013-12-16
      • 2014-12-21
      • 2022-11-10
      相关资源
      最近更新 更多