宏可以利用预处理器 实现部分自动化操作
编译 C++代码时,预处理器会预览一遍所有代码,其中 # 开头的是预编译指令符号,当预编译器评估完代码后,会将评估后的代码交给编译器,进行实际编译和其他操作
预处理阶段像是文本编辑阶段,主要决定编译器要编译的实际代码是什么,宏主要在该阶段起到作用,将代码中的文本替换为其他内容,类似对代码进行查找和替换
模板也是实现自动化操作的一种工具,但是两者发生的时间不同。模板是在编译器编译阶段发生的,而宏是在进入编译器之前的预处理阶段发生的。因为在编译之前发生,宏可以不受任何限制的替换任何代码
#include<iostream>
#define LOG(x) std::cout << x << std::endl
int main(){
LOG("Hello");
}使用宏可以简化代码,但是不要过度使用,写出令他人迷惑的代码。
程序存在测试开发版本和发行使用版本,用户在使用时往往不需要开发阶段的日志功能,逐一去删除相关代码将是一个大工程,此时利用宏可以解决这个问题。
#include<iostream>
#ifdef PR_DEBUG
#define LOG(x) std::cout << x << std::endl
#else
#define LOG(x)
#endif
int main(){
LOG("Hello");
}在项目的 Debug 模式下预处理定义增加 PR_DEBUG,而 Release 模式不需要。那么 Debug 模式会输出相关日志信息,而 Release 模式没有相关代码