作者james732 (好人超)
看板C_and_CPP
標題[問題] #define做出版本號碼
時間Fri Dec 28 14:37:13 2012
開發平台(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
→ 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
推 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