编译我C++代码我使用-W
标志,这将导致警告:克++警告:无符号表达<0的比较结果为总是假
警告:无符号表达< 0的比较结果为总是假
我相信,这被认为是一个错误,被固定在版本的GCC 4.3,但我使用这显然冒犯这里GCC 4.1
代码:
void FieldGroup::generateCreateMessage (const ApiEvent::GroupData &data, omsgstream &result) const {
dblog << debug;
// Write out the data fields we care about, in the order they were specified
for (size_t index = 0; index < fields.size(); ++index) {
size_t esIndex = clsToES[index];
if (esIndex < 0 || esIndex >= data.fields.length()) {
ostringstream buf;
buf << "Invalid field " << index << " (index in ES data set " << esIndex << ", " << data.fields.length() << " fields returned)";
throw InvalidDataException (buf.str());
}
fields[index].writeData (data.fields[esIndex], result);
}
}
警告我越来越:
dbtempl.cpp:在成员函数“void ECONZ :: FIELDGROUP :: generateCreateMessage(常量新西兰::合作:: econz :: EVENTSERVER :: ApiEvent: :GroupData &,ECONZ :: omsgstream &)常量“: dbtempl.cpp:480:警告:无符号表达< 0的比较总是假
我怎么可能阻止出现这些警告?我不想删除-W
标志。
只是一个小小的评论:编译器可以有错误,但这些是非常罕见的。所以当编译产生警告时,首先检查你的代码**,不要认为它是编译器的错误。 – ereOn 2010-08-30 07:23:26
我的不好。我有点误解了在这里找到的gnu bug报告:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23587 – nixgadgets 2010-08-30 07:28:48
有趣的是:如果你比较一个无符号数量和'<0,GCC 4.5.1不会抱怨'在GCC或G ++编译器中,即使在用'-Wall'进行编辑时也是如此。它要求'-Wextra'现在生成警告。也许你应该从GCC 4.1升级到GCC 4.3或更高版本? – 2010-08-30 07:29:33