c语言零错误零警告,C语言 g警告:无符号表达式的比较<0始终为false

要编译我的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.

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值