摆脱编译器警告“警告:未使用呼叫结果”

时间:2016-03-24 04:07:04

标签: c++ c

我正在研究一些包含以下功能的遗留代码。总之,该函数从文本文件中读取一行,删除前导/尾随空格和换行符,检查错误,并在成功时返回字符串中的字符数,或者在错误时返回-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),但它有警告:

  

警告:未使用呼叫结果

1 个答案:

答案 0 :(得分:4)

使用fgets属性声明

warn_unused_result。不检查结果通常是编程错误:如果fgets无法读取任何内容,则返回NULL并保持缓冲区不变。如果您不检查此情况,则可能会处理陈旧或未初始化的数据。

要解决此问题,请检查结果:

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