没有使用False"计算的值"警告

时间:2014-10-28 18:22:41

标签: c++ c c++11 gcc-warning gcc4.7

我正在使用以下功能维护一些丑陋的遗留代码,我正在

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;
    }
}

当我删除这些行时,代码会中断。这是有道理的,因为它们似乎是递增的标记。

如何让编译器识别出实际使用了这些计算?

2 个答案:

答案 0 :(得分:4)

您解除引用valpos然后递增它们,但您永远不会使用解除引用的结果。你可以用以下代码替换这些行:

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

或者,可能是代码最初出现在某人之前"固定"它:

*val++ = *pos++;

答案 1 :(得分:1)

如果您确定代码正确,可以使用-Wno-unused-value编译器选项。 但事实并非如此,因为你显然不知道*val++;做了什么。

*val++; 
*pos++; 

与:

相同
 val++;
 pos++;