0

我没有设法warning C4018: '<' : signed/unsigned mismatch从此代码中删除 a :

SOCKET s;
fd_set set;
FD_CLR(s,&set);

在我看来,问题出在 VS2005 的 FD_CLR 实现内部,实际上这不是什么大问题,只是很烦人。是否有此代码的可移植等效版本不会产生警告?(注意:我知道有一个 #pragma 可以关闭警告。我也知道 FD_CLR 宏实际上可以完美运行。我只是在寻找一种编写代码而不发出警告的方法)

编辑:最终,我发现了发生了什么:第三方 .h 包含(错误!!!)将“u_int”重新定义为“int”。这就是为什么编译器抱怨 FD_CLR 中的 u_int 之间的比较。真丢人。

4

2 回答 2

1

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

于 2012-11-14T09:36:25.897 回答
0

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

于 2012-11-14T08:51:57.410 回答