-
onemoo
你说的情况是:你的函数有返回类型,但你最后没有写 return XX; ,是吧?如果一个函数声明有返回类型,那么在所有返回的地方都必须return适当的值,否则返回的结果是不确定的! 这就是C标准中所谓的“未定义行为”。所以你的问题的直接答案就是:返回值是不确定的,所以你只是凑巧得到了看似“正确的”结果,这样的代码仍是错的。所谓“未定义行为”,就是C标准对此没有详细规定,其实就是为了让写编译器的人可以灵活实现。 所以如果你非要深究原因,那就必须了解你所用的编译器在你的硬件平台上的的实现细节、查看它编译出的汇编码才能确定。 那么如果你还不了解这些知识,那你也没有必要想这些——这和学习C语言没什么关系,你只需知道:千万不要写未定义行为的代码,即便它们看起来行为是对的。如果你非要听听这是怎么回事,下面我说一个可能:我看了你给出的函数体代码 { int z; if(x>y) z=x;else z=y; }, 这个代码中只有一个local变量z,gcc编译器可能会将z直接存到eax寄存器中,而函数返回这种简单的变量会直接利用eax寄存器传递返回值,所以就刚好将将z返回了... 也许你用的编译器也有类似的行为,所以能得到看似正确的结果。 但千万记住:这绝对是错误的代码!!
-
Yexiaomo
#include <stdio.h>
int max(int x,int y)
{
return (x>y ? x:y);
}
int main(){
printf("%d", max(5,3));
return 0;
}抱歉, 以我现在的知识不能回答你的问题, 一开始我以为是 输出 栈顶的值, 又改成下面这个程序, 又解释不通了#include <stdio.h>int max(int x,int y){ }int main(){ printf("%d", max(2,3)); return 0;}结果只输出 1 哈哈哈哈, 我的头大了
-
Yexiaomo
函数, 定义的时候, 可以定义返回值类型. 但并不是说, 非得在 其他函数中(包括主函数main), 调用时就得 就收这个返回值这个视情况而定...... 需要就接收, 不需要,就不接收最简单的 main() 函数#include<stdio.h>
int main()
{
return 0;
}很明显, 这个函数也没有谁能够就收返回值, 但可以运行......这个, 我刚学脑海中也会出现一些 很奇怪的想法, 等你以后学了多了....就慢慢就知道啦啦啦------------------------------------------分----割-----线--------------------------------------------------------啦啦~~Imcainiao