對巨集定義語句進行分析的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...