看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): #define PRD_MAJVER 3 #define PRD_MINVER 0 #define PRD_FIX 0 #define PRD_BUILD 5 #define NAME JamesTool 我有這樣的前置定義,想做出一個 MAKE_VER_STR printf("%s\n", MAKE_VER_STR(PRD_MAJVER,PRD_MINVER,PRD_FIX,PRD_BUILD)); 這樣可以印出 3.0.0.5 以及另一個 PROJ_NAME_VER printf("%s\n", PROJ_NAME_VER(NAME,PRD_MINVER,PRD_FIX,PRD_BUILD)); 這樣可以印出 JamesTool_3.0.0.5 不過實在不知道該怎麼做…用#與##瞎試了半天還是弄不出來 #define PRD_MAJVER 3 #define PRD_MINVER 0 #define PRD_FIX 0 #define PRD_BUILD 5 #define MAKE_VER_STR(A,B,C,D) #A###B###C###D int main() { printf("%s\n", MAKE_VER_STR(PRD_MAJVER, PRD_MINVER, PRD_FIX, PRD_BUILD) ); return 0; } 預期 3005 印出 PRD_MAJVERPRD_MINVERPRD_FIXPRD_BUILD 我也不知道要怎麼把小數點加上去... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.67.48.156
linotwo:http://codepad.org/lc4JbmvV 12/28 15:22
james732:原來要這樣用,大感謝! 12/28 15:26
我剛剛嘗試想把您的範例修改成 #define VER_STR MAKE_VER_STR(PRD_MAJVER, PRD_MINVER, PRD_FIX, PRD_BUILD) 不過結果又變成了 PRD_MAJVER.PRD_MINVER.PRD_FIX.PRD_BUILD JamesTool_PRD_MAJVER.PRD_MINVER.PRD_FIX.PRD_BUILD 難道沒有辦法替換成數字嗎 orz
djshen:#define MAKE_VER_STR(A, B, C, D) STRINGIZE(A.B.C.D) ? 12/28 16:54
這就是我要的!原來這麼簡單 XDDDDD 太感謝兩位了 ※ 編輯: james732 來自: 111.67.48.156 (12/28 17:11)
cutekid:推樓上(Y) 12/28 19:32
linotwo:http://codepad.org/EQARJX6J 12/28 20:06
shietsd:請問樓上為啥要分,_make跟make兩仲寫法? 12/29 12:08
djshen:我的理解是要讓make的參數先被展開 12/29 13:06
shietsd:我了解了 因為 #x 那行的define 不做參數展開 3Q 12/29 18:57
shietsd:應該說有 # 出現的那行 define 就不會被展開 12/29 19:15
shietsd: ## 也 12/29 19:17