在開發中,用巨集定義可以帶來很多方便,但是使用不當,也會帶來災難,並且不容易debug出來,如下圖所示的程式碼:
`define switch_64_128_bit 0
`define svt_axi_max_data_widtn 'd64 + `switch_64_128_bit * ('d64)
int lane_num = `svt_axi_max_data_widtn / 8;
會出什麼事呢?
結果是lane_num = 64。那麼為什麼會有這個現象呢?需要從define的原理說起:巨集定義相當於整體替換,因此上面的表示式相當於:
lane_num = 'd64 + `switch_64_128_bit * ('d64) / 8
從四則混合運算的優先順序可知,此時會先計算乘法,再計算除法,最後計算加法。
建議:在巨集定義的所有引數都使用「()」,巨集定義的整體也使用「()」;
`define switch_64_128_bit 0
`define svt_axi_max_data_widtn ('d64 + `switch_64_128_bit * ('d64))
int lane_num = `svt_axi_max_data_widtn / 8;
巨集 macro 定義的簡介
1.1巨集的簡單使用說明 define square x x x 下面我們就來用一下這個巨集 printf result d n square 5 無可厚非,結果就是5 5 25 int a 5 printf result1 d n square a 1 第一眼可能會脫口而出36,但是你文字替換一下...
巨集 macro 定義與使用
巨集的定義 巨集的替換與 展開 巨集的替換產生的問題 獲取巨集引數名稱 巨集引數的結合 巨集的取消 巨集定義的換行連線 標準預處理巨集 巨集 macro 是基於 define所實現的另一種預處理功能。與基本的 define定義的是常量相比,巨集 macro 允許多個引數化替換,引數中可以是固定的字串...
gdb 除錯巨集定義macro
c語言中的巨集定義,有著各種好處,當然也有它不好的一面。它實現的三個主要功能是 1 字串替換 2 標頭檔案包含 3 通用 模組的擴充套件 在 除錯時候,除錯巨集定義是比較麻煩的一件事,下面就介紹一種比較簡單的方法。include define max a,b a b a b define min a...