GCC と glibc 2.15 を使用して Ubuntu 12.04 でネットワーク アプリケーションをコンパイルしようとしています。次のコードを例として考えてみましょう。
a.cpp:
#include <sys/select.h>
void func ()
{
int fd;
fd_set fds;
FD_SET(fd, &fds);
}
コマンド「gcc -c -Wsign-conversion a.cpp」を使用してこれらの行を正常にコンパイルできますが、-O1 または -O2 オプションを追加すると、次の警告が表示されます。
gcc -c -O1 -Wsign-conversion a.cpp
a.cpp:6: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
gcc 4.4、4.5、および 4.6 の両方に警告があります。
UPD: 私の理解が正しければ、私の例は FD_SET セマンティクスに厳密に準拠しているため、この場合は警告は表示されません。
これの理由は何ですか?どうすれば回避できますか?
ありがとう。
UPD: 既知の問題のようです - http://comments.gmane.org/gmane.comp.lib.glibc.alpha/22344。しかし、GLIBC 2.15でそれをどうすればいいのかわかりませんか? 次のGLIBCを待つだけですか?