要编译我的C代码,我使用-W标志,它会导致警告:
warning: comparison of unsigned expression < 0 is always false
我认为这被视为一个错误,并在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: In member function ‘void ECONZ::FieldGroup::generateCreateMessage(const nz::co::econz::eventServer::ApiEvent::GroupData&, ECONZ::omsgstream&) const’:
dbtempl.cpp:480: warning: comparison of unsigned expression < 0 is always false
我怎么可能阻止这些警告出现?我不想删除-W标志.
您正在测试正值是否低于0.
size_t是无符号的,因此至少为0.
这种情况永远不会发生,编译器只需删除测试就可以优化.这里的警告告诉你,因为如果有人这样做,那可能是个错误.
在你的情况下,你可能只是删除测试,它应该没问题.