Ложное предупреждение «вычисленное значение не используется»

0

Я поддерживаю некоторый уродливый код устаревшего со следующей функцией, и я получаю

warning: value computed is not used

для строк, отмеченных комментариями ниже:

void ReadKeyValuePipe(char* buffer, char* key, char* value) {
    char* pos;
    char key_str[1024];
    char* val = value;
    sprintf(key_str,"%s:",key);
    if((pos = strstr(buffer,key))) {
        pos += strlen(key_str);
        while (*pos && *pos != '|') {
            *val = *pos;
            *val++; // this is actually used
            *pos++; // so is this
        }
        *val = 0;
    }
}

Когда я удаляю эти строки, код прерывается. Это имеет смысл, поскольку они, как представляется, увеличивают маркеры.

Как заставить компилятор распознать, что эти вычисления фактически используются?

  • 1
    Они не используются - смотрите связанный дубликат.
  • 0
    Я был бы больше обеспокоен скрытым переполнением буфера при вызове sprintf . По крайней мере, assert(strlen(key) + 2 <= sizeof(key_str));
Показать ещё 3 комментария
Теги:
c++11
gcc-warning
gcc4.7

2 ответа

4
Лучший ответ

Вы разыгрываете val и pos а затем увеличиваете их, но вы никогда не используете результат разыменования. Вы можете просто заменить эти строки:

*val = *pos;
++val;
++pos;

Или, возможно, что код первоначально был до того, как кто-то "зафиксировал" его:

*val++ = *pos++;
1

Вы можете использовать -Wno-unused-value компилятора -Wno-unused-value если вы уверены, что ваш код верен. Это не так, поскольку вы, очевидно, не знаете, что *val++; делает.

*val++; 
*pos++; 

такой же как:

 val++;
 pos++;
  • 1
    Проблема этого подхода заключается в том, что этот уродливый унаследованный код и мои новые дополнения иногда имеют реальные неиспользуемые значения, и я полагаюсь на предупреждения, чтобы распознать и устранить это. (Я не был человеком, который проголосовал за тебя).
  • 0
    Вы можете применить -Wno-unused-value только к нескольким строкам кода с проблемой, используя pragma GCC diagnostic ignored подход pragma GCC diagnostic ignored

Ещё вопросы

Сообщество Overcoder
Наверх
Меню