Winsock2.h: FD_SET: сравнение целых выражений со знаком и без знака - PullRequest
0 голосов
/ 01 июля 2011

Выдержка из 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 и set типа fd_set *.Похоже, что причина предупреждения может быть связана с #define для FD_SETSIZE.Еще одна выдержка из того же заголовка:

#ifndef FD_SETSIZE
#define FD_SETSIZE  64
#endif

Я переопределил FD_SETSIZE до 64U до включения winsock2.h, но, похоже, это не исправляет.

1 Ответ

0 голосов
/ 01 июля 2011

fd должен иметь тип SOCKET, который u_int.

Соответствующая строка из макроса была:

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

Didn 'Мне приходит в голову, что == является оператором сравнения по любой причине.

...