错误"value computed is not used"警告

False "value computed is not used" warning

本文关键字:used 警告 not computed value 错误 is      更新时间:2023-10-16

我用下面的函数维护了一些丑陋的遗留代码,我得到了

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

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

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

您正在取消引用valpos,然后对它们进行递增,但从未使用取消引用的结果。您可以将这些行替换为:

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

或者,可能是有人"修复"它之前的代码:

*val++ = *pos++;

如果您确信您的代码是正确的,则可以使用-Wno-unused-value编译器选项。事实并非如此,因为您显然不知道*val++;的作用。

*val++; 
*pos++; 

与相同

 val++;
 pos++;