c++ #define

#define 给……下定义
  • 在C或C++语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的

  • 因为宏展开、替换发生在预处理阶段,不涉及函数调用、参数传递、指针寻址,没有任何运行期的效率损失,所以对于一些调用频繁的代码片段,用宏封装的效果比使用 inline 要好,因为它是源码级别的无条件内联

  • “宏”分为有参数和无参数两种:

    • #define ADD(x, y) ((x)+(y))
  • 防止重复定义

  • C++ 预定义宏

    • FILE 源文件名
    • LINE 源文件行号
    • DATE 预处理的日期
    • has_include 是否存在某个可包含的文件
    • cpp_modules 是否支持模块
    • cpp_decltype 是否支持decltype
    • _cpp_lib_make_unique 是否支持提供函数 make_unique()
#if defined(_cpp_decltype_auto)
#else

#if _has_include_(optionnal)
// #define 标识符(宏名) 字符串(常数、表达式、格式串)


//X*X这种写法如果传(5+4),就会出错== 5+4 * 5+4;避免这个问题可以:(X)*(X)
#define TESTFUNC(X) (X)*(X)



#define ngx_tolowper(c)         ((c >= 'A' && c <= 'Z' ? (c | 0x20 : c)))
#define ngx_memzero(buf, n)     (void) memset(buf, 0, n)
  • 可以在宏定义前先检查,如果有定义,可以先取消再定义:
#ifdef AAA
  #undef AAA
#endif
#define AAA 'xx'
  • 通过宏实现命名空间替换
#define START_NAMESPACE_TEST(x) namespace x {
#define END_NAMESPACE_TEST(X) }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值