Z Stack中巨集定義技巧ST 巨集定義理解

2021-06-22 09:03:35 字數 921 閱讀 1709

這個巨集定義如下(ti z-stack的hal_defs.h檔案中):#define st(x) do while (__line__ == -1)。這個巨集定義被其它的巨集定義用來構建乙個完全有效的c宣告。如果沒有這個巨集定義,那麼在if/else條件語句中可能得不到預期的結果。

例如,以下的應用

#define set_regs() st( ioreg1 = 0; ioreg2 = 0; )

代替#define set_regs()

或 #define set_regs() ioreg1 = 0; ioreg2 = 0;

最後這個巨集定義在if/else條件句中將不能得到預期的結果,倒數第二個巨集將導致編譯器錯誤在某些使用if/else結構時。

#define st(x) do while (__line__ == -1)語句分析:

__line__是c/c++的內部巨集定義,得到當前**的行號.

do while(__line__==-1) 因行號肯定是大於-1的,所以這個迴圈只執行一次。

以上內容摘自:

下面是自己的看**時的一些內容:

hal_board_init()中呼叫了->hal_turn_off_led1()

而#define hal_turn_off_led1() st( led1_sbit = 

led1_polarity

(0); )

補充:#define st(x) do while (__line__ == -1)

#define led1_sbit p1_0

#define 

led1_polarity

active_high

#define active_high !! //注意:這裡使用了兩個「!!」表示雙重取反,很有意思吧。

繞了一圈終於知道其led是接在p1.0口了。先記到這裡

巨集定義使用技巧

巨集定義使用技巧 1 把列舉值轉換為字串 define caseenum e case e printf e 2 利用二進位制表示式得到編譯期常量 define cat a,b a b cat 1,2 12 3 給標準斷言新增描述性注釋 define assertmsg a,b assert a b...

巨集定義相關技巧

寫乙個 標準 巨集min,這個巨集輸入兩個引數並返回較小的乙個。另外,當你寫下面的 時會發生什麼事 least min p b 解答 define min a,b a b a b min p b 會產生巨集的 剖析 這個面試題主要考查面試者對巨集定義的使用,巨集定義可以實現類似於函式的功能,但是它終...

程式設計技巧 巨集定義

我們來看看ios的nsassert的定義 if defined nsassertbody define nsassert condition,desc,do pragma pop no extra arg warnings while 0 endif 吊吊的,就是用乙個巨集定義來實現的,那麼我們就不...