2012-04-02 2 views
4

Зачем мне это предупреждающее сообщение «предупреждение: вычисленное значение не используется» в строке «BIO_flush (b64);» и как я могу избавиться от него?предупреждение: вычисленное значение не используется

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

Распространенный способ борьбы с этими ошибками состоит в «явно привести возвращаемое значение далеко»:

(void) BIO_flush(b64); 

В качестве альтернативы вы можете выбрать, чтобы отключить это предупреждение ALLtogether, добавив -Wno-unused-value флаг ,


Вышеприведенное очевидно предполагает, что вас не интересует возвращаемое значение. Если вы не уверены, посмотрите в документации точно, что она возвращает, и решите, хотите ли вы сохранить или использовать это или нет.

+0

Поскольку вы пишете в буфер памяти 'BIO_s_mem()', я ожидаю, что 'BIO_flush' выйдет из строя только из-за-памяти. Таким образом, «вас не интересует возвращаемое значение» более или менее эквивалентно «для вашей функции нет ничего разумного, если у вас заканчивается память». Так как код в вопросе не проверяет возвращаемое значение 'malloc', это в настоящее время верно. Если не обязательно мудро. –

Смежные вопросы