define 巨集幾個細節

2021-04-14 19:52:37 字數 1479 閱讀 6555

要做乙個自動增加版本號的小東西。參考了

http://www.biasecurities.com/blogs/jim/archive/2003/10/08/166.aspx 和

都是使用編譯器自帶的指令碼工具,我對bs的指令碼很不感冒並且它的移植性很差而且還有個問題,

不知道是我沒找到還是什麼,這個指令碼有些不太好分的清楚乙個大專案下的個個子專案導致一些奇怪的bug。

所以我打算使用js的指令碼來寫,js的指令碼是可以在系統下直接執行的,提供了有限的庫。

可以把js直接新增到2003的工程處理事件裡面在編譯前執行。

說了這麼多和define有什麼關係呢?

就是js在處理檔案上很是的不爽又要查詢又要對比而且變化一下格式就要全部重來!!!

#define filever        1,0,0,1

#define productver     1,0,0,1

#define strfilever     "1, 0, 0, 1/0"

#define strproductver  "1, 0, 0, 1/0"

這段define的巨集就讓我痛苦了好久。bs裡面又沒有規則匹配的東西好用。匹配起來要對齊,要處理轉義字元!

因為只需要最後乙個字段變化所以我就考慮能不能把最後乙個欄位拿出來。

定義如下巨集:

#define bulid/

#define filever  1,0,0, bulid

這樣無論什麼指令碼只要讀第二行就可以不用再匹配規則。

這個是可以的執行沒有問題的但接下來就麻煩了

#define strfilever     "1, 0, 0, build/0"

很遺憾這個巨集不能執行!!!

#define strfilever     "1, 0, 0, " build "/0"

這樣可以了吧?還是不成,build被替換後是常數...

這時候我想到#操作符,但這個操作符只能使用在引數巨集裡面所有我定義

#define str(h) #h

#define strfilever     "1, 0, 0, " str(build) "/0"

這樣可以了嗎?哈哈還是不行!!!

輸出結果是t_str 

str括號裡的build被當成字元了並沒有被替換?

這個時候只要定義兩個連線巨集就可以了**如下

#define build /

1#define linkb build

#define str(h) #h

#define link(h) str(h)

#define strfilever     "1, 0, 0," link( linkb )

build可以被正常替換了嘻嘻

define 巨集 替代巨集

編寫 時經常要定義常量 static const nstimeinterval kanimationduration 0.3 複製 使用型別變數,可以清楚地描述常量的含義,以及它的型別。命名法 若常量侷限於某 編譯單元 translation unit,也就是實現檔案,m檔案 之內,則在前面加字母k...

define 巨集 替代巨集

編寫 時經常要定義常量 static const nstimeinterval kanimationduration 0.3 複製 使用型別變數,可以清楚地描述常量的含義,以及它的型別。命名法 若常量侷限於某 編譯單元 translation unit,也就是實現檔案,m檔案 之內,則在前面加字母k...

define巨集定義

預處理指令 以 開頭的行,都預處理指令,用於指示編譯器做一些預處理工作。比如 include h 注 預處理指令不是語句,行尾不要加分號 define的兩種用法 1.定義乙個 數值 2.定義乙個 算式 注 工程中應該避免使用這兩種方式 定義乙個值 define pi 3.14 int main 定義...