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