【发布时间】:2012-11-14 08:38:49
【问题描述】:
我无法从这段代码中删除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 之间的比较。真丢人。
【问题讨论】:
-
我看到的唯一可能是将
s转换为int(FD_CLR( (int)s, &set );) 看看是否有任何改变。其他一切都会在FD_CLR内部四处游荡,或违反其声明(即治愈比疾病更糟)。再三考虑,您可以为FD_CLR编写一个包装器,在本地禁用该特定警告。 -
该代码看起来不错,我从未收到过关于在旧版本或新版本 VS 中使用
FD_CLR宏的警告。你确定这是错误所在的行吗? -
@DevSolar 更改“s”的类型并不能解决问题。不幸的是,问题出在宏内部。但是为 FD_CLR 编写一个包装器是一个干净的解决方案,如果你将它作为真实答案发布,你会得到奖励。
-
@Joachim Pileborg 是的,还使用树线测试程序进行了测试。这可能取决于 VS2005 SP 级别(我的是 2.0.50727 SP2)。
标签: c visual-studio-2005 winsock