什么是宏?
宏是一种批量处理的称谓。计算机科学里的宏是一种抽象(Abstraction)
宏是一种预处理器指令。可以被看作一些命令的集合。在预编译阶段将宏名替换为后面的替换体
宏定义又称为宏代换,宏替换,简称宏“是C提供的三种预处理功能的其中一种。这三种预处理包括:宏定义、文件包含、条件编译
宏就是一系列菜单选项和指令操作的集成,可以实现指定的操作指令,且该操作是计算机自动完成
用#define定义宏
#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)
宏的声明方式:
大致结构:
#define name stuff
自定义名 内容
#define name( parament-list ) stuff
//其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中
解释:把参数替换到文本中:宏仅仅替换文本,至于执行不归他管
例如:
#define SQ(x) x*x
int a=6;
cout << SQ(6+1);
它的实际结果为:13 执行结构为:6+1*6+1 即13
这就是仅仅替换文本,他不会加括号什么的,替换了是啥就是啥,再根据替换了的执行
解决方案:使用括号: 更改为: #define SQ(x) (x)*(x)
提醒在用宏时最好多用括号,以此来避免不必要的错误!
#define的替换规则:
在程序中扩展#define定义符号和宏时,需要涉及几个步骤
1、在调用宏时首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换
2、替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被它们的值所替换,
3、最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。
注意:
1、宏参数和#define定义中可以出现其它#define定义的符号。但是对于宏,不能出现递归
2、当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。