2016-03-24 18 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

fgetswarn_unused_result属性で宣言されています。結果をチェックしないと、しばしばプログラミングエラーが発生します。fgetsが何かを読み込めない場合、NULLを返し、バッファをそのままにします。この状態をチェックしないと、古くなったデータや初期化されていないデータを処理する可能性があります。

if(!fgets(buf, n, mf->f)) return seterror(MDIO_EOF); 
関連する問題