kevent.ident — целое число без знака, а дескриптор файла подписан?

у меня есть kevent ev и int sock = socket(...), Когда я сделал ev.ident == sockG ++ 47 предупредил меня, что warning: comparison between signed and unsigned integer expressions [-Wsign-compare], Что не так в моем подходе?

0

Решение

Если вы проверите тип, это типа uintptr_t который является стандартным типом, достаточно большим, чтобы содержать как наибольшее целое число, так и указатель. Это так, что он может быть использован для любого типа, который может быть легко приведен как целое число. И из Страница справочника FreeBSD kqueue:

Значение, используемое для идентификации этого события. Точная интерпретация определяется приложенным фильтром, но часто является файловым дескриптором.

Так что я бы определенно сказал, что это дизайн.

Если вы хотите избавиться от предупреждения, я предлагаю вам сделать следующее:

ev.ident == static_cast<uintptr_t>(sock)
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]