多层宏的使用--Apple的学习笔记

一,前言

最近在看如何设计优化代码。然后看到了一段居然看不懂的代码,主要是和宏相关,所以分析下。

二,代码分析

#define TEST_LIST(in) \
in(A)\
in(B)\

#define DEFINE_MYTAG(_v) _v,
enum myFlag {
TEST_LIST(DEFINE_MYTAG)
myNone = 0,
};
#undef DEFINE_MYTAG

后来了解到

宏展开是从外层进行的,将外层的参数展开,最后才是对外层展开。按这样的原则,我就能看懂了。那么来拆包TEST_LIST(DEFINE_MYTAG)。

步骤1,对外层展开
变成如下

(DEFINE_MYTAG)(A)
(DEFINE_MYTAG)(B)

步骤2,展开第二层宏
由于#define DEFINE_MYTAG(_v) _v,所以步骤1的效果等于

A
B

这段代码就是用了TEST_LIST(in)又可以用来定义函数,又可以来定义枚举。

三,小结

又学到一招,有机会就可以用起来了。哈哈~

你可能感兴趣的:(多层宏的使用--Apple的学习笔记)