Re: [問題] 確保#define的值在編譯時正確

看板C_and_CPP作者 (咕啾咕啾魔法陣)時間8年前發表 (2017/07/11 08:16), 8年前編輯推噓1(103)
留言4則, 3人參與, 最新討論串3/4 (看更多)
#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://www.ptt.cc/bbs/C_and_CPP/M.1499761003.A.16F.html ※ 編輯: loveflames (118.171.20.220), 07/11/2017 16:22:46

07/11 18:25, , 1F
底線後面接大寫字母是保留給編譯器實作的 盡量避免
07/11 18:25, 1F

07/12 01:57, , 2F
#define Result0 0 // ...
07/12 01:57, 2F

07/12 04:31, , 3F
他就是要 Result0 編譯錯誤...不過倒是可以 #else #error
07/12 04:31, 3F

07/12 09:21, , 4F
if/else的寫法,如果合法值要改就得改header
07/12 09:21, 4F
文章代碼(AID): #1PP8bh5l (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1PP8bh5l (C_and_CPP)