0

摘自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)

我正在传入fdtypeintsettype fd_set *。看起来警告的原因可能来自 #define for FD_SETSIZE。同一标题的另一个摘录:

#ifndef FD_SETSIZE
#define FD_SETSIZE  64
#endif

我在包含 winsock2.h 之前重新定义FD_SETSIZE了,64U但这似乎并没有解决它。

4

1 回答 1

0

fd应该SOCKETu_int.

宏的相关行是:

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

无论出于何种原因,我都没有想到这==是一个比较运算符。

于 2011-07-01T08:21:53.903 回答