加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – g警告:无符号表达式的比较<0始终为false

发布时间:2020-12-16 06:46:41 所属栏目:百科 来源:网络整理
导读:要编译我的C代码,我使用-W标志,它会导致警告: warning: comparison of unsigned expression 0 is always false 我认为这被视为一个错误,并在GCC 4.3版本上得到修复,但我使用的是GCC 4.1 代码显然在这里冒犯: void FieldGroup::generateCreateMessage (cons
要编译我的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.

这种情况永远不会发生,编译器只需删除测试就可以优化.这里的警告告诉你,因为如果有人这样做,那可能是个错误.

在你的情况下,你可能只是删除测试,它应该没问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读