C++预处理的那些事

预处理做什么

  预处理阶段编程的操作目标是“源码”,用各种指令控制预处理器,把源码改造成为另一种形式。

预处理指令

  • 预处理指令都是以#开头
  • 单独的#也是一个预处理指令
  • 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值