1. 概念
宏定义又称为宏代换、宏替换,简称“宏”。
格式: define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
2.示例
(1)、#define PRINTX printf(“%d\n”, x)
在C程序中,以“#”字符开头的代码都是一条C预处理器语句。预处理器的工作之一是把一个记号字符串替换为另一个。该define语句告诉预处理器把代码里的“PRINTX”记号全部替换为字符串”printf(“%d\n”, x)”。
(2)、#define PRINTX(x) printf(“%d\n”, x)
其中”PRINT”是一个带参数的宏。在遇到带参数的宏时,C语言的预处理器将分两步进行替换:先把宏定义里面的参数替换为实际参数,再把宏调用替换为宏定义体。
(3)、#define PRINTX(x) printf(#x “%d\n”, x)
这个”PRINT”宏需要用到C语言预处理器的”#”操作符和字符串合并操作。在扩展的时候,形式参数x将被替换为宏调用里的实际参数;在形式参数的前面加上一个”#”字符作为前缀,将使得实际参数被括在一对双引号里面;最后,C语言预处理器会自动将相邻的字符串合并。
(4)、#define PRINTX(format,x) printf(#x “=%” #format “\n”, x)
3.程序
#include<stdio.h>
#define PRINTX1 printf("%d\n", x)
#define PRINTX2(x) printf("%d\n", x)
#define PRINTX3(x) printf(#x"=%d\n",x)
#define PRINTX4(format,x) printf(#x "=%" #format "\n",x)
int main()
{
int x = 1; PRINTX1;
int y = 2; PRINTX2(y);
int z = 3; PRINTX3(z);
int n = 4; PRINTX4(d, n);
return 0;
}