我在这里有一些代码,可以提出警告
控制达到非空隙函数的末端[-wreturn-type] 。
让我感到困惑的是,如果我在功能打印机中添加return 0;
,警告将消失。我是语言C的新生,因此希望您能帮助我解决这个问题。谢谢。
#include <stdio.h>
int printer(int *ip){
printf("%d", *ip);
// return 0; //with the expression, the warning will disappear. why?
}
int main(int argc, char *argv[]){
int number = 10;
int *ip;
ip = &number;
printer(ip);
return 0;
}
您声明打印机函数返回整数。
int printer(...
但是您不返回整数。我认为您需要做到
void printer(...
为了使其在函数中没有返回语句的情况下工作
编译器正在打印printer()
的警告,因为它不能假设该函数永远不会从其他函数中调用,而不是main()
以外的其他函数,并且其返回值无意中使用。
要解决此问题,您必须放弃编写如此危险的代码:通过return
语句返回一些值或将返回值的类型声明为void
。
int printer(int *ip){
printf("%d", *ip);
// return 0; //with the expression, the warning will disappear. why?
}
此函数返回类型int
的值,因为它在其标题中指定:
int printer(int *ip)
语句开头的int
意味着该函数应该返回调用它的函数的值。这意味着调用功能期望printer()
的值。
如果您有void返回值,则调用函数不会期望返回值,因此要执行这样的操作:
int num = AnyFunction();
其中AnyFunction()
是返回void
的示例函数,或什么都不会导致错误。但是,如果AnyFunction()
返回int
值,则上述语句有效,这是您的情况。现在,如果您的功能不返回任何内容,即使应该返回任何内容,那么num
中将存储什么值?
因此,编译器会给您警告,因为您不得在代码中使用printer()
函数的返回值,因此不需要返回语句。但是,如果您尝试使用上面的语句,那么您的printer()
功能将不会返回任何内容,这将导致问题。在您的情况下,您不使用printer()
的返回值,因此您的代码不会遇到问题。
要删除错误,要么可以:
return 0; // You did this, and you noticed that this resolved the issue
当您返回值0时,这消除了问题(我们使用惯例为0,请纠正我,如果我错了,请为同名)。就像我说的那样,返回值根本不使用,因此,警告已解决。
另外,您也可以将功能标头更改为:
void printer(int *ip) {
这消除了警告,就像现在一样,您的函数返回类型void
的值,这是什么都没有的。在您的情况下,这更好,因为您不使用首选语句返回的值0。