版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gilgamesho/article/details/50539383
一.宏的概念与定义方法
1.被定义为”宏”的标示符称为”宏名”.在编译预处理时,对程序中所有出现的”宏名”,都用宏定义中德字符串去替换,这称为”宏替换”或者”宏展开”.
2.宏定义是由源程序中德宏定义命令完成的.宏替换是由预处理程序自动完成的;在C语言中,”宏”分为有参数和无参数两中.
二.#define的使用
1.”#”表示是一项预处理指令,
2.以”#”开头的均为预处理指令.
3.先给出使用场景 : 频繁使用的简单的 字符串/表达式/格式串,复杂的还是选择使用函数为好;
格式:
#define 标示符 字符串/表达式/格式串
#define 宏名(形参表) 字符串/表达式/格式串
#undef 终止宏定义的作用域
#undef 标示符/宏名
示例1 : #define
#include "stdio.h"
#define H 6 //定义宏
int main(int argc, const char * argv[]) {
int num = H;
printf(“%d”,num);
return 0;
}
示例2 : #undef
宏的定义作用范围从定义开始直到文件结束,或者用#undef终止
#include "stdio.h"
#define H 6//定义宏
int main(int argc, const char * argv[]) {
int num = H;
printf("%d\n",num);
#undef H
int num2 = H;//报错,因为找不到定义的H,并且赋值也是不合法的
printf("%d\n",num2);
return 0;
}
示例3 : #define 表达式
#include "stdio.h"
//宏定义表达式时将元素与结果加上(),是因为调用宏时是先复制宏内表达式,而不是复制表达式结果.避免调用后运算错误
#define Pow(num_A,num_B) ((num_A)*(num_B))
int main(int argc, const char * argv[]) {
int num = Pow(10, 20);
printf("%d\n",num);
#undef Pow
return 0;
}