我正在學習Linux的無線子系統的代碼,發現這個代碼(在ieee80211_rx_handlers):爲什麼要使用宏來調用函數
它首先定義了宏:
#define CALL_RXH(rxh) \
do { \
res = rxh(rx); \
if (res != RX_CONTINUE) \
goto rxh_next; \
} while (0);
然後宏用來調用一系列功能:
CALL_RXH(ieee80211_rx_h_check_more_data)
CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll)
CALL_RXH(ieee80211_rx_h_sta_process)
CALL_RXH(ieee80211_rx_h_decrypt)
CALL_RXH(ieee80211_rx_h_defragment)
CALL_RXH(ieee80211_rx_h_michael_mic_verify)
我的問題是,爲什麼不直接調用函數直接,如:
ieee80211_rx_h_check_more_data(rx);
ieee80211_rx_h_uapsd_and_pspoll(rx);
...
僅僅是爲了簡單易讀的代碼概述?
你認識到你建議與實際發生的不同,對吧? –
我想這是因爲goto。 –
MACRO中有一個小邏輯,如果你只是擴展它,它會擴大源文件的大小,而且MACRO可以避免在重複這個邏輯時出現錯誤,我想 –