我无法从此代码中删除warning C4018: '<' : signed/unsigned mismatch
:
SOCKET s;
fd_set set;
FD_CLR(s,&set);
在我看来,问题出在VS2005的FD_CLR实现中,实际上这不是一个大问题,只是非常讨厌。是否存在此代码的便携式等效版本,不会产生警告? (注意:我知道有一个#pragma可以关闭警告。我也知道FD_CLR宏实际上运行正常。我只是在寻找一种编写代码而无需警告的方法)
编辑:最后,我发现了正在发生的事情:第三方.h包含(错误!!!)将“u_int”重新定义为“int”。这就是编译器抱怨在FD_CLR中的u_int之间进行比较的原因。对我感到羞耻。
答案 0 :(得分:1)
不是在全局或本地每次调用FD_CLR()
时禁用警告,而是为该调用编写一个包装器,在本地为您禁用该特定警告。
答案 1 :(得分:0)
也许你可以重写宏FD_CLR并修改循环变量的int / uint,但它会导致宏重定义警告。我认为#pragma更好。