2010-03-11 188 views
4

我有这个警告。C警告'返回'没有值,在函数返回非void

警告:'返回'没有值,在函数返回非void。

+9

“医生,当我在这里揉时疼!” “好吧,停止这样做吧!” :-P认真地说,如果一个函数有一个返回类型,不要只返回',而是返回一个所需类型的值。 – 2010-03-11 05:01:13

回答

12

您有类似:

int function(void) 
{ 
    return; 
} 

添加一个返回值,或者改变返回类型为void。

的错误信息是非常明确的:

警告:没有任何价值“回归”,在函数返回非空。

没有价值的回报与我所展示的相似。该消息还告诉你,如果函数返回'void',它不会给出警告。但是因为这个函数应该返回一个值,但是你的'return'语句没有,所以你有一个问题。

这通常代表古代的代码。在C89标准之前的日子里,编译器不一定支持'void'。接受的风格,那么:

function_not_returning_an_explicit_value(i) 
char *i; 
{ 
    ... 
    if (...something...) 
     return; 
} 

技术上,函数返回一个int,但预计没有价值。这种类型的代码引发了你所得到的警告 - 而C99正式宣布禁止它,但编译器为了向后兼容性继续接受它。

+0

我感谢您解释为什么这只是作为警告。 – tomjakubowski 2016-01-07 00:58:50

3

此警告,当你做这种情况:

int t() { return; } 

因为t()被声明为返回一个int,但return语句没有返回一个int。正确的版本是:

int t() { return 0; } 

显然你的代码是比较复杂的,但它应该是很容易在你的代码被发现裸return

4

,如果你忘记添加一个return语句作为最后一个语句这个警告也发生了:

int func(){} 

如果不指定一个函数它默认的返回类型为int不空,因此这些都是还错误:

func(){} 
func(){ return; } 

如果你真的不需要返回一个值,你应该声明你的函数为返回void:

void func(){} 
void func(){ return; }