What Does "Error: Variable is used unitialized Whenever "if" Condition is False" mean?

What Does "Error: Variable is used unitialized Whenever "if" Condition is False" mean?

我正在解决一个问题集,我在创建函数并返回其值时遇到了问题。代码如下:

int shift(char c){
    int key;
    if (isupper(c)){
        key = c - 65;
    }else if (islower(c)){
        key = c - 97;
    }
return key;
}

该函数以一个字符作为输入,returns一个整数。该整数值将是字母字符减去特定的 ascii 值,这些值将按从 0 到 25 的顺序设置每个字母数字。当我不初始化键变量时,问题就出现了。当我将它初始化为 0 时,该函数可以正常工作。

我想知道为什么会这样?我看不出在计算完成后离开键未初始化会如何影响它的值。

出现的实际错误是:

vigenere.c:48:15: error: variable 'key' is used uninitialized whenever 'if' condition
      is false [-Werror,-Wsometimes-uninitialized]
    }else if (islower(c)){

您收到此警告是因为存在 key 未设置和随后使用的代码路径。

isupperislower的功能不是对立的,例如一个错误的 return 值并不意味着另一个的真实 return 值。例如,c 包含字符 '0'isupperislower 都会 return false。发生这种情况时,永远不会设置 key 的值,因此它的值为 indeterminate。这意味着无法可靠地预测它的值,并且尝试读取它实际上可以调用 undefined behavior.

你需要处理两个函数都存在的情况 return false:

int shift(char c){
    int key;
    if (isupper(c)){
        key = c - 65;
    }else if (islower(c)){
        key = c - 97;
    } else {
        key = c;
    }
    return key;
}

或者交替:

int shift(char c){
    if (isupper(c)){
        return c - 65;
    }else if (islower(c)){
        return c - 97;
    } else {
        return c;
    }
}