在C中,如何在一个参数中测试与“|”结合的几个标志之一?
发布时间:2020-12-16 10:31:45 所属栏目:百科 来源:网络整理
导读:我有下一个代码: 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) { // neve
我有下一个代码:
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; } 如果已经使用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绝对正确:)哎呀! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |