参数中带有|运算符的c函数中的查询

参数中带有|运算符的c函数中的查询,c,C,有人能解释一下下面的函数到底在做什么吗?这是我第一次遇到带有|运算符的函数调用 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(IE

有人能解释一下下面的函数到底在做什么吗?这是我第一次遇到带有|运算符的函数调用

    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);
    }

它在
IEEE80211\u FCTL\u FTYPE
IEEE80211\u STYPE\u QOS\u数据之间执行位或
。然后将结果发送到函数
htole16()

稍后,
htole16()
的结果是按位的,并使用
fc
进行编辑



就像调用一个函数
foo(a+b)
,表达式
(a+b)
将首先求值,然后将结果发送到函数
foo()

这不是函数调用,而是
返回语句。将
return
的参数放在括号内,使其看起来像函数调用是一种。。。一些C程序员所做的样式选择。我觉得它很可疑,我认为它是一种很难闻的气味。 无论如何,函数只需进行计算,并返回结果值。按位or运算符(
|
)用于计算函数
htole16()
)的参数,然后将其返回值按位与参数进行运算(
&
),并与对同一函数的第二次调用的返回值进行比较

在现代C语言中,返回类型应该是
bool
,因为这样更清楚(这里返回的是
=
的结果)

您可以这样使用它:

const int x = ieee80211_is_data_qos(myFc);

其中
myFc
应该是
\uuu le16

类型的值。您是否考虑过阅读C教程?有一个原因,为什么没有人不应该将
返回
视为
C
中的函数:D