AX巨集Macros運算

2022-05-12 08:58:12 字數 451 閱讀 2405

先給個例子

static

void

macroscalc(args _args)

}

按照平常的變數計算邏輯,輸出結果應該是

10,9,8,7,6,5

但實際的輸出結果是

9,8,7,6,6,6

這個就有點想不通了,第一句print之前沒有執行defdec,卻自減了,而for迴圈執行了三次defdec,卻只減了一次?

這就是變數和常量的區別了

我們常用的是變數,導致用變數的思維來處理常量

正確的常量macros計算並不是在執行時計算的

很簡單的測試,跟蹤一下這個指令碼就會發現,defdec根本就跟蹤不到,也就是沒有執行

系統對macros的計算處理是在編譯的時候就生成了

也就是說系統在編譯時,見到defdec,就是對#test進行了自減,生成新的常量

再看C C 中的巨集 Macros

通常我們對c c 中巨集的理解不外乎兩點 一,用來處理標頭檔案的重複包含。二,用來定義類似的函式的巨集。define max a,b a b a b 類似於這樣的作法主要是想繞過型別檢查,這樣無論a和b是什麼型別之要能用 運算子來比較的便可以使用巨集來代替反覆寫max函式不同版本。但這樣做明顯有乙個...

和 巨集運算子

代表將標記轉換成字串。如 define a token token a hello 就是 hello 注意,這裡也可以跟字串拼接。如 define a token hello token a world 就是 hello world 即 hello world 代表將兩邊標記連線成乙個標記。如 de...

WebRTC中的關係運算巨集

目錄前言 正文閱讀webrtc原始碼的過程中,我們經常會遇到各種巨集,比較常見的就是運算子巨集。1.巨集 rtc check eq 作用 判斷是否等於。記憶方式 巨集的最後兩個字元 eq equal,相等的意思。2.巨集 rtc check ne 作用 判斷是否不等於。記憶方式 巨集的最後兩個字元 ...