简单吗?
1.宏的基本信息
(1)#define 在预处理过程中处理
(2)#定义的宏可以在程序任意位置出现
(3)#define定义的宏常量本质为字面量
先来探讨下面的这几个宏正不正确
#define ERROR -1
#define PATH1 "D:\test\test.c"
#define PATH2 D:\test\test.c
#define PATH3 D:\test\
test.c
int main()
{
int err = ERROR;
char* p1 = PATH1;
char* p2 = PATH2;
char* p3 = PATH3;
}
单步编译:gcc -E test.c -o test.i
程序并没有报错,预处理器,只进行文本替换,不会进行语法检查,如下所示。
完整编译: gcc test.c
报错,因为替换后的19、20行代码是有语法错误的,不符合C语言的语法规范,过不了编译器这关,所以编译器会报错。
宏常量预编译的时候已经文本替换掉了,所以不占用内存空间,const只读变量占用内存空间。只要是变量都会占用内存空间的,常量都不会占用内存空间,例如整型常量(整数)、实型常量(含有小数)、字符常量、字符串常量、宏常量(又叫符号常量或define宏)都不会占用内存空间。
2.宏表达式分析
#define 表达式的使用类似函数调用
#define 表达式可以比函数更强大,但也更容易出错
示例代码
#include <stdio.h>