C++预处理的那些事
程序员文章站
2022-03-02 21:07:19
...
预处理做什么
预处理阶段编程的操作目标是“源码”,用各种指令控制预处理器,把源码改造成为另一种形式。
预处理指令
- 预处理指令都是以
#
开头 - 单独的
#
也是一个预处理指令 -
GCC使用
-E
,输出预处理之后的源码 -
#include
可以包含任意的文件
预处理的巧用
//table.inc
static int table[] = {
... ... ...
... ... ...
};
//.c 文件
static int table[] = {
# include "table.inc"
};
宏定义
- 宏定义是一个源码级别的“文本替换”
- 宏替换无视 C++ 的语法规则
- 宏的展开、替换是在预处理阶段,不涉及函数的调用、参数的传递、指针寻址;所以没有任何运行期的效率损失。
- 对于使用频繁的小段代码,用宏封装比
inline
关键字更好,因为宏是源码级别的无条件内联 - 宏没有作用域,是全局生效的;所以临时作用的宏,最好在用完后尽快使用
#undef
取消定义
宏定义前先检查
#ifdef xxx # undef xxx //取消宏定义 #endif #define xxx somtthing
查看gcc预定义的宏
g++ -E -dM - < /dev/null