[英]C program bad code confusion (compare values)
只是尝试比较 C 中的两个值,并找到较小的值。 不小心以一种非常糟糕的方式做了它,但我不明白为什么C仍然让它运行......程序没有包含两个值相等的分支。 但是当它被赋予两个相等的值时,它给程序给出了相同的值......请问C编译器是做什么的? 谢谢! (下面的例子返回 3...)
int min(int x, int y);
int main(void)
{
int a = 3, b = 3;
printf("%d", min(a,b));
}
int min(int x, int y)
{
if(x > y)
return y;
}
else if(x < y)
{
return x;
}
不小心以一种非常糟糕的方式做了它,但我不明白为什么 C 仍然让它运行..
该程序不应编译,因为此代码
int min(int x, int y)
{
if(x > y)
return y;
}
else if(x < y)
{
return x;
}
语法不正确。
这个 else 语句
else if(x < y)
{
return x;
}
放置在任何函数之外,包括min
。
看来你的意思
int min(int x, int y)
{
if(x > y)
{
return y;
}
else if(x < y)
{
return x;
}
}
但是当它被赋予两个相等的值时,它给程序给出了相同的值......请问C编译器是做什么的?
该程序具有未定义的行为,因为当函数min
的两个参数彼此相等时,它不返回任何内容。
来自 C 标准(6.9.1 函数定义)
12 如果到达终止函数的},并且调用者使用了函数调用的值,则行为未定义。
它应该被定义为例如以下方式
int min(int x, int y)
{
return y < x ? y : x;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.