Winsock2.h:FD_SET:有符号和无符号整数表达式之间的比较

时间:2011-07-01 07:45:42

标签: gcc warnings mingw winsock2

来自winsock2.h的摘录:

#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)

我传递的fd int类型setfd_set *类型FD_SETSIZE。看起来警告的原因可能来自#ifndef FD_SETSIZE #define FD_SETSIZE 64 #endif 的#define。另一个摘录来自同一标题:

FD_SETSIZE

在包含winsock2.h之前,我将64U重新定义为{{1}},但这似乎无法修复它。

1 个答案:

答案 0 :(得分:0)

fd的类型SOCKET应为u_int

宏的相关行是:

if (((fd_set *)(set))->fd_array[__i] == (fd)) {

我没想到==无论出于什么原因都是比较运算符。