C++ 如果在开关情况下不匹配,为什么此函数返回ASCII值?
这个程序打印97 **如果没有任何开关大小写匹配,它将输出ASCII值。 如果所有情况都不匹配,为什么函数会返回ASCII值**您的程序行为未定义:对于任何返回int而非main的函数,您必须有一个明确的返回值C++ 如果在开关情况下不匹配,为什么此函数返回ASCII值?,c++,switch-statement,C++,Switch Statement,这个程序打印97 **如果没有任何开关大小写匹配,它将输出ASCII值。 如果所有情况都不匹配,为什么函数会返回ASCII值**您的程序行为未定义:对于任何返回int而非main的函数,您必须有一个明确的返回值 你所观察到的似乎是堆栈的损坏;97是作为函数参数传递的小写字母a的ASCII值。这里是UB。foo函数获取一个它不处理的输入,因为您的案例都不支持输入“a”。如果我试着在你的具体案例中解释这个UB,那么可能会发生的事情是,foo返回它被转换为int的输入,这意味着cout Undefin
你所观察到的似乎是堆栈的损坏;97是作为函数参数传递的小写字母a的ASCII值。这里是UB。foo函数获取一个它不处理的输入,因为您的案例都不支持输入“a”。如果我试着在你的具体案例中解释这个UB,那么可能会发生的事情是,foo返回它被转换为int的输入,这意味着cout Undefined beahviour。您必须始终返回一个值;如果开关中的所有案例都不匹配,那么从foo返回什么?不从声明要执行的函数返回任何导致未定义行为的内容,这会导致整个程序格式错误和无效;t使return看起来像函数。请启用编译器警告。警告C4715:“foo”:并非所有控制路径都返回value@CIsForCookies不过,我还是坚持我的说法。YMMV.:IAM在DeV C++中运行,运行时没有任何错误,打印output@Kishore:绝对:这是未定义行为的一种可接受的表现形式。现在我知道输出是由于堆栈损坏。但它是否应该在到达非void结尾时返回错误function@Kishore编译器告诉您。C本身没有固有的错误检查。@WeatherVane现在我已经启用了编译器警告。谢谢
int foo(char c)
{
switch(c)
{
case '1':
return(1);
case '2':
return(2);
}
}
int main()
{
cout << foo('a');
}
int foo(char c) {
switch(c) {
case '1':
return(1);
case '2':
return(2);
//code to execute if 'c' does not equal the value following any of the cases
default:
return(-1);
}
}
int main() {
cout << foo('a');
}
// simple char to int without switch
int foo(char c) {
/*
// reject unwanted char
if (c=='a') {
return -1;
}
*/
// convert char to int
return (int)c;
}
int foo(char c)
{
switch(c)
{
case '1':
return(1);
case '2':
return(2);
default:
return (-1); // indicates error!!
}
}
int main()
{
int tmp = foo('a');
if (tmp != -1)
cout << tmp;
else
cout << "bad input";
}