<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type></HEAD>
<BODY>
<DIV>
<DIV style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif">Hi,<BR><BR>Why here is used a macro instead of an inline func.<BR><BR>Thanks,<BR>Martin</DIV></DIV>
<DIV dir=ltr>
<HR>
<SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif; FONT-WEIGHT: bold">From: </SPAN><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif"><A href="mailto:daniel.baluta@gmail.com">Daniel Baluta</A></SPAN><BR><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif; FONT-WEIGHT: bold">Sent: </SPAN><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif">‎23/‎12/‎2013 08.27</SPAN><BR><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif; FONT-WEIGHT: bold">To: </SPAN><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif"><A href="mailto:fred.chou.nd@gmail.com">Fred Chou</A></SPAN><BR><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif; FONT-WEIGHT: bold">Cc: </SPAN><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif"><A href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies</A></SPAN><BR><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif; FONT-WEIGHT: bold">Subject: </SPAN><SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Calibri,sans-serif">Re: Linux-wireless: why use macro to call functions</SPAN><BR><BR></DIV>On Mon, Dec 23, 2013 at 8:05 AM, Fred Chou &lt;fred.chou.nd@gmail.com&gt; wrote:<BR>&gt; Hi,<BR>&gt;<BR>&gt; I was studying the Linux wireless subsystem code and noticed this code (in<BR>&gt; ieee80211_rx_handlers):<BR>&gt;<BR>&gt; It first defines the macro:<BR>&gt;<BR>&gt; #define CALL_RXH(rxh) \<BR>&gt;&nbsp; do {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; res = rxh(rx);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (res != RX_CONTINUE) \<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; goto rxh_next;&nbsp; \<BR>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } while (0);<BR>&gt;<BR>&gt; Then the macro is used to call a series of functions:<BR>&gt;<BR>&gt; CALL_RXH(ieee80211_rx_h_check_more_data)<BR>&gt; CALL_RXH(ieee80211_rx_h_uapsd_and_pspoll)<BR>&gt; CALL_RXH(ieee80211_rx_h_sta_process)<BR>&gt; CALL_RXH(ieee80211_rx_h_decrypt)<BR>&gt; CALL_RXH(ieee80211_rx_h_defragment)<BR>&gt; CALL_RXH(ieee80211_rx_h_michael_mic_verify)<BR>&gt;<BR>&gt;<BR>&gt; My question is, why not just call the functions directly like:<BR>&gt;<BR>&gt; ieee80211_rx_h_check_more_data(rx);<BR>&gt; ieee80211_rx_h_uapsd_and_pspoll(rx);<BR>&gt;<BR>&gt; ...<BR>&gt;<BR>&gt; Is it just for the sake of outlining the code for easy reading? Appreciate<BR>&gt; if anyone can explain. Thanks!<BR><BR>Hi,<BR><BR>As you can see above the macro does also error checking.I don't necessarily<BR>think that the code is easier to read, but it can save you some typing.<BR><BR>thanks,<BR>Daniel.<BR><BR>_______________________________________________<BR>Kernelnewbies mailing list<BR>Kernelnewbies@kernelnewbies.org<BR>http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies<BR></BODY></HTML>