C-控制到达非无效函数的末尾[-Wreturn类型]



我有这个,当我试图编译时,终端会给我错误;有人能帮我吗?

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

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

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

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

如果该语句为true,则函数将返回2.0,如果为false,则将到达函数末尾而不返回值。

您的代码

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)

最新更新