我正在学习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可以避免在重复这个逻辑时出现错误,我想 –