2016-03-24 19 views
-1

Aşağıdaki işlevi içeren eski bir eski kod üzerinde çalışıyorum. Özet olarak, işlev metin dosyasından bir satır okur, boşluk/boşluk boşluklarını ve satırsonunu açar, hataları kontrol eder ve hatadaki karakter sayısını ya da hata durumunda -1 değerini döndürür. Uyarıdan kurtulmak için bana bazı ipuçları verebilir misiniz? Bunun bir hata olmadığını biliyorum, ancak kodu geliştirmek istiyorum. Teşekkürler!Derleyici uyarısından kurtulma "uyarı: arama sonucu kullanılmaz"

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); 
} 

fonksiyonu (nvcc) derlemek mümkün ama uyarı veriyor:

warning: result of call is not used

+3

Ne çizgisi üzerinde o hatayı rapor ediyor: Bunu düzeltmek için

, sadece sonucu kontrol? – duskwuff

+1

Bizi işlev çağrısını göstermeniz gerektiğini düşünüyorum. –

+0

İşlevden önce '(void)' yaz. E.g (boş) readline (... ' – BLUEPIXY

cevap

4

fgetswarn_unused_result niteliğiyle bildirilir. Sonucu kontrol etmemek genellikle bir programlama hatasıdır: fgets bir şey okumada başarısız olursa NULL değerini döndürür ve arabelleğe dokunulmaz. Bu durumu kontrol etmezseniz eski veya başlatılmamış verileri işleyebilirsiniz.

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