編譯我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