gpt4 book ai didi

c - 为什么要用宏来调用函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:30 25 4
gpt4 key购买 nike

我正在研究 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);

...

难道只是为了代码的大纲便于阅读?

最佳答案

宏的每次使用都会扩展到 if 检查和 goto,而不仅仅是一个函数调用。

if 测试的不同之处仅在于调用哪个函数来产生条件。因为否则代码会重复,所以他们使用宏来生成样板文件。

他们可能会穿插调用 res = xyz( rx ); 宏扩展到 if … goto 部分,然后宏将不带任何参数.有多少被封装到宏中是代码分解风格的问题。

关于c - 为什么要用宏来调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20737761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com