什么是宏定义:
宏可以看作为一些命令的集合。它是一种预处理器指令,在预编译阶段将宏名替换为后面的替换体。
#define name stuff
// 姓名 内容
宏定义的使用:
宏定义变量大小
#define X 777
int main()
{
printf("%d", X);//777
}
宏定义简写
#define REG register//为register这个关键字起一个简单的别名
宏定义变量字符内容
#define YU youcanseeme
int main()
{
printf("%d", YU);//youcanseeme
}
宏定义运算
注意:宏是把参数替换到文本中,要想满足所需还要考虑运算法则,记得在必要的地方多加括号
//方法一:两个运算式相乘(X可以是数,也可以是运算式)
#define SQ(x) (x)*(x)
//方法二:(r只能是一个单独的数)
#define SA (r) (r*r)
注意:
#define SQ(x) x * x
int main()
{
printf("%d",SQ(6+1));//注意:这个时候答案是不对的
//此时:6+1*6+1按照运算法则来说为:13
//宏是把参数替换到文本中,也就是宏直接吧6+1替换掉了x直接带入了后面的表达式当中了!
}
/
#define SQ(x) (x)*(x)//x加括号保证完整性
#define DOUBLE(x) (x) + (x)
int a = 5;
printf("%d\n" ,10 * DOUBLE(a))//此时的答案并非100,而是55
//宏是把参数替换到文本中 此时的运算为:10*5+5=55!;
///
#define DOUBLE(X) ((X)+(X))
宏语句:
#define PRINTF printf("hello world\n")
宏定义函数:
#define ADD(a,b) ((a)+(b))
宏定义预定符号的补充
__FILE__ //进行编译的源文件
__LINE__ //文件当前的行号
__DATE__ //文件被编译的日期
__TIME__ //文件被编译的时间
__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义·
#define PRINT printf("file:%s\n line:%d\n", __FILE__, __LINE__)
#include<stdio.h>
int main()
{
PRINT;
}
取消宏定义
#undef name