C - 控制到达非空函数的末尾[-Wreturn-type]

时间:2014-10-22 04:51:41

标签: c

我有这个,当我尝试编译时,终端给我错误;有人可以帮助我吗?

int e=0;

float func(float x, float y, float z)
{
     e++;
     if((x*x)+(y*y)+(z*z)<=4)
     return 2.0;
}

4 个答案:

答案 0 :(得分:3)

如果func不正确,(x*x)+(y*y)+(z*z)<=4会返回什么?你没有定义那种情况,但之后在函数中没有任何内容。控制流(即执行路径)已经到达函数的末尾而没有返回任何内容,但是应该返回,因为该函数是非空的。因此,“控制到达无效功能的终点”。

答案 1 :(得分:2)

您的函数并不总是返回值,因为它仅在if () test为true时才返回值(2.0)。使用缩进将有所帮助。

答案 2 :(得分:1)

这是因为return语句跟在if()块之后。

如果该陈述为真,则该函数将返回2.0,如果该值为假,则它将到达函数的末尾而不返回值。

答案 3 :(得分:1)

您的代码

int e=0;

float func(float x, float y, float z)
{
     e++;
     if((x*x)+(y*y)+(z*z)<=4)
     return 2.0;
}

如果您使用缩进将是

int e=0;

float func(float x, float y, float z)
{
     e++;
     if ((x*x)+(y*y)+(z*z)<=4)
         return 2.0;
}

如果您使用大括号将是

int e=0;

float func(float x, float y, float z)
{
     e++;
     if((x*x)+(y*y)+(z*z)<=4)
     {
        return 2.0;
     }
}

这显然是道路不会返回值。

但声明

if((x*x)+(y*y)+(z*z)<=4)

可以整理以使其更具可读性

也许

if (((x*x) + (y*y) + (z*z)) <= 4)