C中宏定义解析

定义常量宏

在代码中用宏代替常量,使代码含义更明确:

#define M_PI        3.14159265358979323846264338327950288

定义函数宏

最小值函数

如果你想要定义一个取最小值函数,不想写一个函数,不想使用函数频繁的开销系统资源,想用更轻量级的函数宏来解决,一般你会写:

#define MIN(A,B) ((A) < (B) ? (A) : (B))

这种写法其实存在问题,应该是下面这种行,想一想上面的A如果是x++,结果是什么?下面这种写法可以避免这种问题。

#define __NSX_PASTE__(A,B) A##B

#define MIN(A,B) __NSMIN_IMPL__(A,B,__COUNTER__)

#define __NSMIN_IMPL__(A,B,L) ({ __typeof__(A) __NSX_PASTE__(__a,L) = (A); \
                                 __typeof__(B) __NSX_PASTE__(__b,L) = (B); \
                                 (__NSX_PASTE__(__a,L) < __NSX_PASTE__(__b,L)) ? __NSX_PASTE__(__a,L) : __NSX_PASTE__(__b,L); \
                              })

日志函数

在C中debug时,我们经常用到的就是日志函数,如果原来的日志函数打印的信息不足于满足要求,我这时候就可以简单的通过定义宏函数的方式,更新原本的函数打印。

//A better version of NSLog
#define NSLog(format, ...) do {                                                                          \
                             fprintf(stderr, "<%s : %d> %s\n",                                           \
                             [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String],  \
                             __LINE__, __func__);                                                        \
                             (NSLog)((format), ##__VA_ARGS__);                                           \
                             fprintf(stderr, "-------\n");                                               \
                           } while (0)

至于为啥要把语句段放到do-whille里,你想要了解的可以看看下面的这篇C系语言中宏定义的详细解释,虽然有些冗长,但是讲的很详细,值得一看:宏定义的黑魔法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值