kevent.ident是无符号整数,而文件描述符是否已签名?

时间:2013-05-23 18:36:17

标签: c++ freebsd kqueue

我有kevent evint sock = socket(...)。当我ev.ident == sock时,g ++ 47警告我warning: comparison between signed and unsigned integer expressions [-Wsign-compare]。我的方法有什么问题?

1 个答案:

答案 0 :(得分:2)

如果检查类型,它的类型为uintptr_t,这是一个足以容纳最大整数或指针的标准类型。这样它可以用于任何类型的类型,可以很容易地作为整数。并从FreeBSD kqueue manual page

  

用于识别此事件的值。确切的解释由附加的过滤器确定,但通常是文件描述符。

所以我肯定会说它是设计的。

如果你想摆脱警告,我建议你施展插座:

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