у меня есть kevent ev
и int sock = socket(...)
, Когда я сделал ev.ident == sock
G ++ 47 предупредил меня, что warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
, Что не так в моем подходе?
Если вы проверите тип, это типа uintptr_t
который является стандартным типом, достаточно большим, чтобы содержать как наибольшее целое число, так и указатель. Это так, что он может быть использован для любого типа, который может быть легко приведен как целое число. И из Страница справочника FreeBSD kqueue:
Значение, используемое для идентификации этого события. Точная интерпретация определяется приложенным фильтром, но часто является файловым дескриптором.
Так что я бы определенно сказал, что это дизайн.
Если вы хотите избавиться от предупреждения, я предлагаю вам сделать следующее:
ev.ident == static_cast<uintptr_t>(sock)
Других решений пока нет …