2012-04-02 12 views
4

Warum bekomme ich diese Warnmeldung "Warnung: Wert berechnet wird nicht verwendet" in Zeile "BIO_flush (b64);" und wie kann ich es loswerden?Warnung: Wert berechnet wird nicht verwendet

unsigned char *my_base64(unsigned char *input, int length) 
{ 
    BIO *bmem, *b64; 
    BUF_MEM *bptr; 

    b64 = BIO_new(BIO_f_base64()); 
    bmem = BIO_new(BIO_s_mem()); 
    b64 = BIO_push(b64, bmem); 
    BIO_write(b64, input, length); 
    BIO_flush(b64); 
    BIO_get_mem_ptr(b64, &bptr); 

    unsigned char *buff = (unsigned char *)malloc(bptr->length+1); 
    memcpy(buff, bptr->data, bptr->length-1); 
    buff[bptr->length-1] = 0; 

    BIO_free_all(b64); 

    return buff; 
} 
+1

'BIO_flush()' ist wahrscheinlich deklariert, um etwas zurückzugeben, aber Sie speichern das Ergebnis nirgendwo oder in einem Ausdruck. – jrok

+0

BIO_flush() wird als ein Makro deklariert, das einen Wert berechnet. Da das Ergebnis keiner Variablen zugewiesen ist, erhalten Sie diese Warnung. Ich denke, wenn BIO_flush eine echte Funktion war, würde diese Warnung nicht auftreten. Ich denke, um die Warnung zu vermeiden -Wall müssen Sie zuweisen, um eine temporäre –

+0

'BIO_flush' könnte auch ein Makro zu einem Ausdruck mit einem Komma-Operator, wobei die linke Seite des Komma-Operator hat keine Nebenwirkung. Ohne die Definition von 'BIO_flush' zu sehen, ist das alles nur ein Rätsel. – celtschk

Antwort

14

Der gemeinsame Weg mit diesen Fehlern umzugehen, ist zu „ausdrücklich den Rückgabewert wegzuwerfen“:

(void) BIO_flush(b64); 

Alternativ können Sie wählen, indem Sie die -Wno-unused-value Flagge diese Warnung alltogether auszuschalten .


Das oben genannte geht natürlich davon aus, dass Sie an dem Rückgabewert nicht interessiert sind. Wenn Sie sich nicht sicher sind, schauen Sie in der Dokumentation genau nach, was sie zurückgibt und entscheiden Sie, ob Sie dies speichern/verwenden wollen oder nicht.

+0

Da Sie in einen Speicherpuffer 'BIO_s_mem()' schreiben, erwarte ich, dass 'BIO_flush' nur bei zu wenig Arbeitsspeicher fehlschlägt. So "Sie sind nicht am Rückgabewert interessiert" ist mehr oder weniger gleichbedeutend mit "es gibt nichts vernünftiges für Ihre Funktion zu tun, wenn Sie nicht mehr genügend Speicher haben". Da der Code in der Frage auch nicht den Rückgabewert von "malloc" überprüft, ist dies zur Zeit der Fall. Wenn nicht unbedingt weise. –