VS2005 + WinSock:警告C4018:'<' :签名/未签名不匹配

时间:2012-11-14 08:38:49

标签: c visual-studio-2005 winsock

我无法从此代码中删除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之间进行比较的原因。对我感到羞耻。

2 个答案:

答案 0 :(得分:1)

不是在全局或本地每次调用FD_CLR()时禁用警告,而是为该调用编写一个包装器,在本地为您禁用该特定警告。

答案 1 :(得分:0)

也许你可以重写宏FD_CLR并修改循环变量的int / uint,但它会导致宏重定义警告。我认为#pragma更好。