2016-03-24 43 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);