2012-04-02 50 views
4

「BIO_flush(b64);」という行にこの警告メッセージが表示されるのはなぜですか?どのように私はそれを取り除くことができますか?また警告:計算された値が使用されていません

(void) BIO_flush(b64); 

あなたが-Wno-unused-valueフラグを追加することでalltogetherこの警告をオフにするかを選択することができます

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()はおそらく何かを返すと宣言されていますが、結果をどこにでも格納したり、式で使用したりしているわけではありません。 – jrok

+0

BIO_flush()は、値を計算するマクロとして宣言されます。結果が変数に割り当てられていないため、この警告が表示されます。私は、BIO_flushが実際の関数であれば、この警告は発生しないと思います。私は、警告を回避すると思います。-Wallには、一時的に割り当てる必要があります。 –

+0

'BIO_flush'はカンマ演算子を持つ式に展開するマクロでもかまいません。コンマ演算子の左辺には副作用がありません。 'BIO_flush'の定義を見ることなく、すべてのことがblingの推測です。 – celtschk

答えて

14

これらのエラーに対処する一般的な方法は「を明示的に離れて、戻り値をキャスト」にあります。


上記の説明は、あなたが戻り値に興味がないことを前提としています。あなたが確信が持てない場合は、ドキュメントを正確に見て、それが何を返すのかを確認し、これを保存するかどうかを決定してください。

+0

メモリバッファ 'BIO_s_mem()'に書き込んでいるので、 'BIO_flush'はメモリ不足でのみ失敗すると思います。したがって、「戻り値には興味がありません」とは、「メモリが足りなくなった場合に関数が行うことは何も合理的ではありません」ということと多かれ少なかれ同等です。問題のコードは 'malloc'の戻り値もチェックしないので、それは現在本当です。必ずしも賢明ではない場合。 –

関連する問題