2016-03-24 44 views
-1

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

warning: result of call is not used

+3

什么行它报告的错误? – duskwuff

+1

我想你需要向我们展示函数调用。 –

+0

函数前写'(void)'。例如'(void)readline(...' – BLUEPIXY

回答

4

fgets声明与warn_unused_result属性。不检查结果往往是一个编程错误:如果fgets未能读取任何内容,则返回NULL并且不改变缓冲区。如果您不检查此情况,则可能会处理过时或未初始化的数据。

为了解决这个问题,只是检查结果:

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