Re: [问题] 确保#define的值在编译时正确

楼主: loveflames (咕啾咕啾魔法阵)   2017-07-11 16:16:40
#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
作者: Hazukashiine (私は幸せです)   2017-07-11 18:25:00
底线后面接大写字母是保留给编译器实作的 尽量避免#define Result0 0 // ...
作者: LPH66 (-6.2598534e+18f)   2017-07-12 04:31:00
他就是要 Result0 编译错误...不过倒是可以 #else #error
楼主: loveflames (咕啾咕啾魔法阵)   2017-07-12 09:21:00
if/else的写法,如果合法值要改就得改header

Links booklink

Contact Us: admin [ a t ] ucptt.com