2012-04-02 3 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가 실제 함수라면이 경고가 발생하지 않을 것이라고 생각합니다. 나는 경고를 피하기 위해 - 임시로 할당 할 필요가있다. –

+0

'BIO_flush'는 쉼표 연산자가있는 표현식으로 확장되는 매크로 일 수도있다. 쉼표 연산자의 왼쪽에는 아무런 부작용이 없다. 'BIO_flush'의 정의를 보지 않고서는 모두 짐작할 만합니다. – celtschk

답변

14

이러한 오류를 처리하는 일반적인 방법은 "를 명시 적으로 멀리 반환 값을 캐스팅"이다 .


위의 내용은 사용자가 반환 값에 관심이 없다고 가정합니다. 확신이 없으면 문서에서 정확히 무엇이 반환되는지보고이 항목을 저장하거나 사용할지 여부를 결정하십시오.

+0

메모리 버퍼'BIO_s_mem()'에 쓰기 때문에,'BIO_flush'는 메모리 부족시에만 실패 할 것으로 예상됩니다. 따라서 "반환 값에 관심이 없다"는 것은 "메모리가 부족하면 함수가 수행 할 수있는 합리적인 방법이 없습니다"라는 것과 다소 동등합니다. 질문의 코드가'malloc'의 반환 값을 검사하지 않기 때문에, 그것은 사실입니다. 반드시 현명하지 않은 경우. –

관련 문제