3. 宏的内容中的特殊字符

我在使用带有参数的宏时,宏的内容中可以使用如下两种特殊字符来扩充宏的功能。

  1. # 用于将参数两端加上双引号(")成为字符串字面值。
  2. ## 用于参数代码级别的拼接

示例

下列示例中宏 TO_STR(a) 是将 参数a 转为字符串字面值。宏 JOIN(a,b) 将参数 a 和 b 合并在一起,中间加一个下划线。形成一个字符串内容的替换

#include <stdio.h>

#define TO_STR(a)   #a
#define JOIN(a,b)   a##_##b

int main(int argc, char * argv[]) {
    int my_score = 100;

    printf("%s\n", TO_STR(XYZ));  // 替换为: printf("%s\n", "XYZ");
    printf("%d\n", JOIN(my, score));  // 替换为: printf("%s\n", my_score);

    return 0;
}

实验:

复制上述代码,使用编译器查看预处理后的结果,看上述定义的宏都替换成了什么?