【问题标题】:Get rid of compiler warning "warning: result of call is not used"摆脱编译器警告“警告:未使用调用结果”
【发布时间】:2016-03-24 04:07:03
【问题描述】:

我正在处理一些包含以下功能的遗留代码。总之,该函数从文本文件中读取一行,去除前导/尾随空格和换行符,检查错误,并在成功时返回字符串中的字符数,在错误时返回 -1。你能给我一些提示来摆脱警告吗?我知道这不是错误,但我想改进代码。谢谢!

static int readline(file *mf, char *buf, int n, int strip) {
    if (!buf || n < 1 || !mf) return seterror(MDIO_BADPARAMS);

    // Read the line
    fgets(buf, n, mf->f);

    // End of file reached?
    if (feof(mf->f)) return seterror(MDIO_EOF);

    // File I/O error?
    if (ferror(mf->f)) return seterror(MDIO_IOERROR);

        // comment line?
        if (buf[0] == '#') return readline(mf,buf,n,strip);

    // Strip whitespace
    if (strip) strip_white(buf);

    return strlen(buf);
}

该函数能够编译(nvcc)但它有警告:

警告:调用结果未被使用

【问题讨论】:

  • 它在哪一行报告该错误?
  • 我认为您需要向我们展示函数调用。
  • 在函数前写入(void)。例如(void)readline(...

标签: c++ c


【解决方案1】:

fgets 是用warn_unused_result 属性声明的。不检查结果通常是一个编程错误:如果fgets 没有读取任何内容,它会返回 NULL 并保持缓冲区不变。如果您不检查这种情况,您可能会处理陈旧或未初始化的数据。

要解决这个问题,只需检查结果:

if(!fgets(buf, n, mf->f)) return seterror(MDIO_EOF);

【讨论】:

    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2016-11-20
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多