#define FOO_VALUE 5
#define N5 ~,1
#define N11 ~,1
#define N18 ~,1
#define N21 ~,1
#define N29 ~,1
#define Result1 1//5,11,18,21,29
#define Result0 //其他,0对应到TEST的n
#define TEST(x,y,n) _TEST(x,y,n)//在串接前先展开x与y
#define _TEST(x,y,n) __TEST(x##y,n)
#define __TEST(x,n) ___TEST(x,n)//须多展开一次,不定参数先确认参数数量才展开参数
#define ___TEST(d,n,...) n
#define CAT(a,b) _CAT(a,b)
#define _CAT(a,b) a##b
//上面的code可以独立出来包在header内
#if CAT(Result,TEST(N,FOO_VALUE,0)) > 0
//不做任何事,Result0会导致编译错误
#endif
这样可以在局部开放5,11,18,21,29以外的值
透过新增NXX的定义即可,不必再去改header,区块结尾再undef