作者loveflames (咕啾咕啾魔法阵)
看板C_and_CPP
标题Re: [问题] 确保#define的值在编译时正确
时间Tue Jul 11 16:16:40 2017
#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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.171.20.220
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1499761003.A.16F.html
※ 编辑: loveflames (118.171.20.220), 07/11/2017 16:22:46
1F:→ Hazukashiine: 底线後面接大写字母是保留给编译器实作的 尽量避免 07/11 18:25
2F:→ Hazukashiine: #define Result0 0 // ... 07/12 01:57
3F:推 LPH66: 他就是要 Result0 编译错误...不过倒是可以 #else #error 07/12 04:31
4F:→ loveflames: if/else的写法,如果合法值要改就得改header 07/12 09:21