я поддерживать некоторые уродливые унаследованного кода с помощью следующей функции, и я получаюЛожное «значение, рассчитанное не используется» предупреждение
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;
}
}
Когда я удаляю эти строки, код прерывается. Это имеет смысл, поскольку они, как представляется, увеличивают маркеры.
Как я могу заставить компилятор признать, что эти вычисления фактически используются?
Они не используются - см связанный дубликат. – BartoszKP
Я бы больше беспокоился о переполнении скрытого буфера из вызова 'sprintf'. По крайней мере, бросьте в 'assert (strlen (key) + 2 <= sizeof (key_str))' – Casey
@Casey Вся эта функция кажется неправильным способом сделать это для меня, но я должен выбрать свои битвы. –