VS2005+;WinSock:警告C4018:&x27<';:有符号/无符号不匹配

VS2005+;WinSock:警告C4018:&x27<';:有符号/无符号不匹配,c,visual-studio-2005,winsock,C,Visual Studio 2005,Winsock,我无法删除警告C4018:“也许您可以重写宏FD_CLR并修改循环变量的int/uint,但它会导致宏重新定义警告。我认为“pragma”更好。与其全局禁用警告,或者每次调用FD\u CLR()时都在本地禁用警告,不如为该调用编写一个包装器,在本地为您禁用该特定警告。我看到的唯一可能性是将s强制转换为int(FD\u CLR((int)s,&set))看看这会不会改变什么。其他的一切都会在FD_CLR内部游荡,或违反其声明(即治愈比疾病更糟糕)。再想一想,您可以为FD_CLR编写一个包装器,在本

我无法删除
警告C4018:“也许您可以重写宏FD_CLR并修改循环变量的int/uint,但它会导致宏重新定义警告。我认为“pragma”更好。

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

我看到的唯一可能性是将
s
强制转换为
int
FD\u CLR((int)s,&set)
)看看这会不会改变什么。其他的一切都会在FD_CLR内部游荡,或违反其声明(即治愈比疾病更糟糕)。再想一想,您可以为
FD_CLR
编写一个包装器,在本地禁用该特定警告。该代码看起来很好,而且我从来没有在旧版本或新版本的VS中遇到过关于
FD_CLR
宏使用的警告。您确定错误是关于这一行吗?@DevSolar更改“s”的类型无法解决问题。不幸的是,问题出在宏内部。但为FD_CLR编写一个包装器是一个干净的解决方案,如果您将其作为真实答案发布,则会给您带来额外的好处。@Joachim Pileborg是的,还通过树线测试程序进行了测试。这可能取决于VS2005 SP级别(我的级别为2.0.50727 SP2)。
SOCKET s;
fd_set set;
FD_CLR(s,&set);