2016-03-24 16 views
-1

Ich arbeite an einigen Legacy-Code, der die folgende Funktion enthält. Zusammengefasst liest die Funktion eine Zeile aus der Textdatei, entfernt führende/nachfolgende Leerzeichen und Zeilenumbrüche, prüft auf Fehler und gibt die Anzahl der Zeichen in der Zeichenfolge bei Erfolg oder -1 bei Fehler zurück. Kannst du mir ein paar Hinweise geben, um die Warnung los zu werden? Ich weiß, es ist kein Fehler, aber ich möchte den Code verbessern. Vielen Dank!Compiler Warnung loswerden "Warnung: Ergebnis des Anrufs wird nicht verwendet"

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

Die Funktion ist in der Lage (nvcc) zu kompilieren, aber es hat die Warnung:

warning: result of call is not used

+3

Was Linie auf diesen Fehler meldet? – duskwuff

+1

Ich denke, Sie müssen uns den Funktionsaufruf zeigen. –

+0

schreibe '(void)' vor der Funktion. ZB "(void) readline (...' – BLUEPIXY

Antwort

4

fgets mit dem warn_unused_result Attribute deklariert. Das Überprüfen des Ergebnisses ist oft ein Programmierfehler: Wenn fgets nichts liest, gibt es NULL zurück und lässt den Puffer unberührt. Wenn Sie nicht nach dieser Bedingung suchen, verarbeiten Sie möglicherweise veraltete oder nicht initialisierte Daten.

Um dies zu beheben, überprüfen Sie nur das Ergebnis:

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