1、宏操作符#
#操作符可以把宏参数转换成字符串
#include<stdio.h>
#define STR(n) #n
int main(){
printf("STR(n)中的值为:%s",STR(5+6));
return 0;
}
通过GCC预编译后可以看到我们里面的代码的参数5+6变成了 字符串
##操作符可以把代表标识符的宏参数和其他内容链接得到一个新的宏标识符
预编译后的文件我们可以看到指针变量的名称改为了p_val得到了我们新的变量名
2、条件编译
- 在编译时从几组语句里选择一组编译而忽略其他组
- #ifdef/#ifndef...#else...#endif结构可以根据一个宏名称是否被定义过从两组语句里选择一组编译
- #if...#elif(任意多次)...#else...#endif结构可以根据任意逻辑表达式从多组语句里选择一组编译
#ifdef YI 表示当我们编译时定义了这个YI则执行printf(“1\n”)这条语句 否则执行 printf("2\n")这条语句
换做#ifndef YI 如果编译时定义了宏则执行printf(“2\n“) 否则执行printf("1\n")