Я поддерживаю некоторый уродливый код устаревшего со следующей функцией, и я получаю
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;
}
}
Когда я удаляю эти строки, код прерывается. Это имеет смысл, поскольку они, как представляется, увеличивают маркеры.
Как заставить компилятор распознать, что эти вычисления фактически используются?
Вы разыгрываете val
и pos
а затем увеличиваете их, но вы никогда не используете результат разыменования. Вы можете просто заменить эти строки:
*val = *pos;
++val;
++pos;
Или, возможно, что код первоначально был до того, как кто-то "зафиксировал" его:
*val++ = *pos++;
Вы можете использовать -Wno-unused-value
компилятора -Wno-unused-value
если вы уверены, что ваш код верен. Это не так, поскольку вы, очевидно, не знаете, что *val++;
делает.
*val++;
*pos++;
такой же как:
val++;
pos++;
-Wno-unused-value
только к нескольким строкам кода с проблемой, используя pragma GCC diagnostic ignored
подход pragma GCC diagnostic ignored
sprintf
. По крайней мере,assert(strlen(key) + 2 <= sizeof(key_str));