【发布时间】:2021-12-06 02:38:18
【问题描述】:
只是试图比较 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;
}
【问题讨论】:
-
在定义为这样做的函数中不返回值会导致未定义的行为。这意味着最终结果是不可预测的。编译器不需要标记所有未定义的行为。但是许多编译器会对此类错误发出警告。可能需要调高编译器的警告级别才能看到所有警告。
-
不,编译器没有让这个程序运行,因为有明显的语法错误。如果您运行的源代码与您在此处发布的源代码不同,请改为发布该源代码。
-
@kaylum:关于“在定义为这样做的函数中不返回值会导致未定义的行为”:不返回值不会导致未定义的行为。使用未返回值的函数的值具有未定义的行为。 C 标准有意允许不返回值,因为有些函数有时返回值,有时不返回,例如获取或设置存储设置的函数,由其参数选择。
-
gcc不会编译此类代码。你的编译器叫什么名字? -
对混乱感到抱歉...我发布的时候已经很晚了...花括号弄乱了...但是@kaylum解释了原因,以及其他帮助的答案我解决了混乱。谢谢大家!
标签: c compiler-errors min function-definition