摆脱编译器警告"warning: result of call is not used"

Get rid of compiler warning "warning: result of call is not used"

本文关键字:call of is used not result 编译器 警告 warning      更新时间:2023-10-16

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

警告:未使用调用结果

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

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

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