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
未设置和随后使用的代码路径。
isupper
和islower
的功能不是对立的,例如一个错误的 return 值并不意味着另一个的真实 return 值。例如,c
包含字符 '0'
,isupper
和 islower
都会 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;
}
}
我正在解决一个问题集,我在创建函数并返回其值时遇到了问题。代码如下:
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
未设置和随后使用的代码路径。
isupper
和islower
的功能不是对立的,例如一个错误的 return 值并不意味着另一个的真实 return 值。例如,c
包含字符 '0'
,isupper
和 islower
都会 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;
}
}