C++中的宏是什么意思
作者:光泽雨
C++里的宏其实就是编译器在正式干活前,先帮你做的一次“全局查找替换”,它不是真正的函数或变量,这篇文章主要介绍了c++中的宏是什么,需要的朋友可以参考下
C++ 里的宏其实就是编译器在正式干活前,先帮你做的一次“全局查找替换”,它不是真正的函数或变量 。 这只是预先定好的一段文本规则,用来简化代码或定义常量,在代码编译前就会完成替换 。百科
🛠 宏到底是怎么工作的
- 先替换后编译:在代码正式编译前,处理程序会把代码里所有的宏名,直接换成你定义的字符串,换完才进行后续编译 。
- 不做语法检查:这个替换过程很“盲目”,不进行类型或语法检查,所以写错了往往要等到编译时才会报错 。
- 不占内存空间:宏定义只是一个临时符号,替换完标识符就删除了,不像变量那样需要分配内存空间
主要有哪两种用法
- 无参数宏:最常用来定义常量,比如把 PI 直接定义为 3.14,避免代码里到处写数字 。
- 带参数宏:看起来像函数,能接收参数,但本质还是把参数填进文本里进行替换,比如定义一个求最大值的规则 。百科
用的时候注意啥
- 参数要加括号:宏体里的参数最好加上括号,防止因为运算顺序导致结果出错 。
- 末尾别加分号:定义末尾通常不加分号,不然分号也会被替换进代码里,可能导致语法错误 。
- 名字通常大写:宏名一般用大写字母,方便和普通变量或函数区分开 。
- 优先用新特性:现代 C++ 更推荐用
const常量或inline函数代替宏,因为它们更安全,有类型检查 。百科
宏是 C/C++ 预处理器提供的一种文本替换机制。预处理器在编译器真正编译代码之前,会对源文件进行预处理,其中就包括展开宏。宏本身不是 C++ 语言的一部分,而是一个独立的预处理指令。
基本定义
宏通过 #define 指令定义,通常有两种形式:
1对象式宏(无参宏)
#define PI 3.14159 #define MAX_SIZE 1024
在代码中出现的 PI 和 MAX_SIZE 会被直接替换成对应的文本。
2. 函数式宏(带参宏)
#define SQUARE(x) ((x)*(x)) #define MAX(a,b) ((a) > (b) ? (a) : (b))
工作原理
预处理阶段,宏名称会被其定义体原封不动地替换进去。例如:
int a = SQUARE(5); // 预处理后变为: int a = ((5)*(5));
QT4版本的信号和槽写法
//连接有参数的信号和槽
//优点:参数直观。写法简单
//缺点:编译器不检测参数类型
void(Teacher::*teacherSingnal)()=&Teacher::hungry;
void(Student::* studentSlot)(QString)=&Student::treat;
connect(this->zt,SIGNAL(hungry()),this->st,SLOT(treat(QString)));
classISOver();
//信号和槽扩展
//信号连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个槽函数
4、信号和槽的参数类型,必须一一对应
5、信号的参数个数可以多于槽函数,反之不可以,相同个数的参数类型也要一一对应。
6、可以利用disconnect 断开信号槽的连接。
到此这篇关于C++中的宏是什么意思的文章就介绍到这了,更多相关c++宏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
