2015-11-13 96 views
-6

有人可以解釋我下面的函數究竟做了什麼?這是我第一次遇到使用|的函數調用運營商。運算符在參數

static inline int ieee80211_is_data_qos(__le16 fc) 
    { 
    /* 
    * mask with QOS_DATA rather than IEEE80211_FCTL_STYPE as we just need 
    * to check the one bit 
    */ 
    return (fc & htole16(IEEE80211_FCTL_FTYPE | IEEE80211_STYPE_QOS_DATA)) == 
      htole16(IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA); 
    } 
+2

https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B –

+4

您是否考慮閱讀C教程? – fuz

回答

2

這是不是一個函數調用,這是一個return聲明。將return的參數放在圓括號內,使其看起來像一個函數調用,是由一些C程序員做出的...樣式選擇。我發現它非常可疑,我認爲它是一種嚴重的氣味。

無論如何,函數只是做一個計算,並返回結果值。按位或運算符(|)用於計算函數htole16()的參數,其函數htole16()的參數的返回值隨後按位與:ed(&)與參數進行比較,並與第二次調用該函數的返回值進行比較。

在現代的C中,返回類型應該是bool,因爲它更清晰(==的結果就是這裏返回的)。

你會使用它,像這樣:

const int x = ieee80211_is_data_qos(myFc); 

其中myFc應該__le16類型的值。

+0

有一個原因,爲什麼沒有人不應該把'return'作爲'c'中的函數。 :d – Michi

0

IEEE80211_FCTL_FTYPEIEEE80211_STYPE_QOS_DATA之間執行按位OR |。然後將結果發送到功能htole16()

後來htole16()的結果是按位進行的:用fc編輯。


就像調用一個函數foo(a + b);,表達(a + b)將首先評估,然後結果將被髮送到功能foo();