参数中带有|运算符的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