一,前言
最近在看如何设计优化代码。然后看到了一段居然看不懂的代码,主要是和宏相关,所以分析下。
二,代码分析
#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)又可以用来定义函数,又可以来定义枚举。
三,小结
又学到一招,有机会就可以用起来了。哈哈~
网友评论