我现在正在学习C编程语言并尝试理解这些函数。 下面的代码不会在Visual Studio中给出错误并返回发送到该函数的第一个参数。 我认为它应该给出错误,但事实并非如此。
给定代码如何工作以及如何返回代码中第一个参数3?
#include <stdio.h>
#include <stdlib.h>
int hesapla(int x, int y);
void f();
int main()
{
int a, b, sonuyc;
int s;
printf("\n");
printf("sonuc = %d", hesapla(3, 10));
system("pause");
return 0;
}
int hesapla( int x, int y) {
if (x > y )
return y;
if (x == y)
return y + 1;
}
谢谢..
答案 0 :(得分:1)
hesalpha
时,您的功能return
不会x < y
,因此,它会显示未定义的行为。
当前两个条件均为时,您可以使用if else
处理此案例,或仅将return
值作为默认值处理。
答案 1 :(得分:0)
玩具需要确保所有的pathes显式返回一个值,否则你将得到任何在用于从非确定性函数返回值的寄存器中遗留的内容。
int hesapla( int x, int y)
{
if (x > y )
return y;
if (x == y)
return y + 1;
return x ;
}
虽然当你的代码变得更复杂时,为了你自己的理智,并且完全避免这个问题,我建议:
int hesapla( int x, int y)
{
int ret = x ;
if (x > y )
{
ret = y;
}
else if(x == y)
{
ret = y + 1;
}
return ret ;
}
对于这样的简单函数,可以将结果返回到单个表达式中:
int hesapla( int x, int y)
{
return (x > y) ? y : (x == y) ? y + 1 : x ;
}
或许简洁,但我不确定我会推荐它。
答案 2 :(得分:0)
if-statement都不是,所以hesapla ()
将返回0
,int
函数的默认返回值。
目前还不清楚你到底要做什么,但也许你是在追求这个?
int
hesapla (int x, int y)
{
if (x == y) {
return y + 1;
}
if (x > y) {
return y;
}
return x;
}
尽管如此,这更好......
int
hesapla (int x, int y)
{
if (x == y) {
return x + 1;
}
return min (x, y);
}