Re: [問題] 確保#define的值在編譯時正確
※ 引述《james732 (好人超)》之銘言:
: 但寫起來很醜又累贅…
: 會需要用同樣的方式再去檢查BAR_VALUE, ABC_VALUE...等等
: 這樣一堆寫起來還挺可怕的orz
: 想請問要達成一樣的事,還有沒有其他的寫法呢?
聽起來你的需求是防呆,阻止別人使用你不承認的值。
通常我的作法是定義幾個 macro 讓別人選用,但禁止直接使用數字
in foo.h:
#define FOO_VALUE_A 5
#define FOO_VALUE_B 11
#define FOO_VALUE_C 18
#define FOO_VALUE_D 21
#define FOO_VALUE_E 29
再讓別人這樣定義:
#define FOO_VALUE FOO_VALUE_A
如此當這行 define 的值不是 FOO_VALUE_ 開頭的允許值時 (比如直接填數字 30)
那 code review 很容易看得出來
而他自己手誤寫成 FOO_VALUE_30 或 FOO_VALUE_F 的時候,
靠 compiler 的檢查也很容易發現它是 undefined macro
這種作法我最早是在 X lib (UNIX X window library) 的字串定義上看到的,
雖然函數實際上吃的是字串,但不希望你自己打字串,太容易手誤,
必須用 macro 讓 compiler 幫你檢查無心的拼字錯誤
當然這方法在隊友腦殘過度的狀況下是沒有用的,你只能儘量防呆,防不了真正腦殘
真正的腦殘會在 compiler 靠腰時去 foo.h 加一行 #elif FOO_VALUE == 30
或乾脆把整段檢查註解掉,然後很得意的告訴你說他解決了那個 compiler error
--
桃樂絲: 可是, 如果你沒有頭腦, 為什麼會說話?
稻草人: ㄝ, 我也不知... 但是有些人沒有頭腦也能說超~多話呢。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.35.210
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1499744184.A.F99.html
推
07/11 11:57, , 1F
07/11 11:57, 1F
→
07/11 12:03, , 2F
07/11 12:03, 2F
推
07/11 12:37, , 3F
07/11 12:37, 3F
推
07/11 18:16, , 4F
07/11 18:16, 4F
推
07/11 19:21, , 5F
07/11 19:21, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):