我正在使用以下功能维护一些丑陋的遗留代码,我正在
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;
}
}
当我删除这些行时,代码会中断。这是有道理的,因为它们似乎是递增的标记。
如何让编译器识别出实际使用了这些计算?
答案 0 :(得分:4)
您解除引用val
和pos
然后递增它们,但您永远不会使用解除引用的结果。你可以用以下代码替换这些行:
*val = *pos;
++val;
++pos;
或者,可能是代码最初出现在某人之前"固定"它:
*val++ = *pos++;
答案 1 :(得分:1)
如果您确定代码正确,可以使用-Wno-unused-value
编译器选项。
但事实并非如此,因为你显然不知道*val++;
做了什么。
*val++;
*pos++;
与:
相同 val++;
pos++;