奇奇怪怪的return

x33g5p2x  于2021-11-19 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(109)

今天在写程序的时候,发现了一个小小的知识点,其实也并不算知识点吧,也许是一个编译器的漏洞,申明:今天的编译器用的是vs2019,今天想分享给大家这一段有趣的代码!

话不多说,直接上代码!

#include<stdio.h>
int  fun()
{
	printf("hehe");
	return ;

}
int main()
{
	int c = fun();
	printf("%d", c);
	return 0;
}

大家乍一看,哎这是一段有问题的代码啊,很明显,fun函数是有返回值的,但是最后的return 却并没有设定返回值,只写了一个return ,同时我们还要用变量c来接收这个返回值,最后编译器竟然通过了,这一段漏洞百出的代码,编译器竟然通过了,当然,我们无视警告哈,那么,接下来,我来带大家讨论一下这个返回值究竟是什么!

首先输出这段代码的返回值!

哎,返回值是4,那么我们改变一下printf输出的内容,看一下它是否会变化!

这次我们改变了一下输出的内容,哎,这好像是我们输出的字符的数目哎,这好像是printf的返回值哎,我们再测试了几组数据,发现确实是,然后我们看一下下面的这段代码测试!


 

上面这一段呢,fun函数里面直接没有语句,只有一个return语句,执行结果为乱码,或者说是随机数,那马接下来我们用赋值或者说定义变量语句来试一下!

我们再fun函数中定义了两个变量并对其进行了初始化赋值,返回结果又是乱码,我们知道赋值语句是没有返回值的,结论先别着急下,我们再试几组代码!

到了这儿,真相已经逐渐开始明了了,下面我们总结一下结论。

当我们出现上面的代码的时候 ,即**在主函数中调用一个局部函数的时候,注意:这个局部函数在定义的时候设定了整型返回值(这个函数允许有返回值),且return 后面并没有明确表示要返回的值具体的值,即return;此时在主函数中接收到的返回值就是局部函数return 语句上一段语句或者函数调用语句的返回值,**那么这个结论在主函数中是否同样适用呢?我们来简单看一下!

很明显,并不适用于主函数的return(如果适用的话最后的代码应该为2了),说明这个结论只适用于特定的情况,希望大家能够注意这个点!好了,今天的分享到此结束,如果大家觉得有所帮助的话,点一个小小的赞吧! 

相关文章

微信公众号

最新文章

更多