Winsock2.h:FD_SET:有符号和无符号整数表达式之间的比较
问题描述:
来自winsock2.h的摘录:Winsock2.h:FD_SET:有符号和无符号整数表达式之间的比较
#define FD_SET(fd, set) do { u_int __i;\
for (__i = 0; __i < ((fd_set *)(set))->fd_count ; __i++) {\
if (((fd_set *)(set))->fd_array[__i] == (fd)) {\
break;\
}\
}\
if (__i == ((fd_set *)(set))->fd_count) {\
if (((fd_set *)(set))->fd_count < FD_SETSIZE) {\
((fd_set *)(set))->fd_array[__i] = (fd);\
((fd_set *)(set))->fd_count++;\
}\
}\
} while(0)
我传入int
类型的fd
和fd_set *
类型的set
。看起来警告的原因可能来自#define for FD_SETSIZE
。另一个来自同一标题的摘录:
#ifndef FD_SETSIZE
#define FD_SETSIZE 64
#endif
我在包含winsock2.h之前将FD_SETSIZE
重新定义为64U
,但这似乎没有解决它。
答
fd
应该是SOCKET
这是u_int
。
从宏观的相关行是:
if (((fd_set *)(set))->fd_array[__i] == (fd)) {
没有发生,我认为==
是什么原因比较操作。