巨集定義 define裡的分號

2021-10-10 12:14:36 字數 1540 閱讀 7093

對巨集定義語句進行分析的g點:

空格為界,以行定義,換行結束

巨集替換

#define nrf_ble_scan_def(_name)                            \

static nrf_ble_scan_t _name; \

nrf_sdh_ble_observer

(_name ## _ble_obs, \

nrf_ble_scan_observer_prio, \

nrf_ble_scan_on_ble_evt,

&_name) \

分析:

static nrf_ble_scan_t _name;                           	   \

nrf_sdh_ble_observer

(_name ## _ble_obs, \

nrf_ble_scan_observer_prio, \

nrf_ble_scan_on_ble_evt,

&_name) \

nrf_ble_scan_def

(m_scan)

;

等價於將該預計替換成下面的意思

static nrf_ble_scan_t m_scan;

//注意這nrf_sdh_ble_observer後面的分號是nrf_ble_scan_def(m_scan);這個後面的分號

nrf_sdh_ble_observer

(m_scan ## _ble_obs, nrf_ble_scan_observer_prio, nrf_ble_scan_on_ble_evt,

&_name)

;

實現的是宣告乙個變數m_scan,再執行一條函式nrf_sdh_ble_observer;所以巨集定義後面有沒有分號得看你實際想要替換的位置,比如在巨集定義後面加上分號,在使用的時候後面就不用有分號,如上面的語句就可以改為

//巨集定義

#define nrf_ble_scan_def(_name) \

static nrf_ble_scan_t _name; \

nrf_sdh_ble_observer(_name ## _ble_obs, \

nrf_ble_scan_observer_prio, \

nrf_ble_scan_on_ble_evt, &_name); \

//使用是時不加分號

nrf_ble_scan_def

(m_scan)

注:使用的是nordic的sdk裡的藍芽掃瞄進行的分析,不過在sdk的巨集定義後面有乙個分號,看了看他們其他的巨集定義發現並沒有這個情況,所以應該是官方的乙個小問題。

define巨集定義

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

巨集定義 define

巨集定義又稱為巨集代換 巨集替換,簡稱 巨集 格式 define 識別符號 字串 其中的識別符號就是所謂的符號常量,也稱為 巨集名 預處理 預編譯 工作也叫做巨集展開 將巨集名替換為字串。1 define printx printf d n x 在c程式中,以 字元開頭的 都是一條c預處理器語句。預...

define巨集定義

include include define sub x,y x y define access before element,offset,value sub element,offset value using namespace std int main access before array...