我正在尝试使用 GCC 和 glibc 2.15 在 Ubuntu 12.04 上编译网络应用程序让我们以以下代码为例:
一个.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?