Rob*_*ert 3 c++ arguments function
我有下一个代码:
int main()
{
OwnSelect(23, FD_READ | FD_WRITE); // <---- Several arguments as one
return 0;
}
int OwnSelect(SOCKET s, long lNetworkEvents)
{
// How can i check that FD_READ has been passed?
if(lNetworkEvents == FD_READ)
{
// never here
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果已经使用FD_READ传递了另一个FD,我如何检查FD_READ是否已通过.谢谢!
好像你在这里错过了一些基本的位操作.您正在对FD_READ和FD_WRITE(| =按位OR)执行OR运算,从而将两个值指示的位设置为参数.要检查是否已传递FD_READ,您需要使用FD_READ AND lNetworkEvents并检查结果是否等于FD_READ,如下所示:
if (FD_READ == (lNetworkEvents & FD_READ)) { ... }
这当然假设FD_READ和FD_WRITE是意图以这种方式使用的值(即通常不具有重叠位).
编辑:修复,wabepper绝对正确:)哎呀!