189 8069 5689

c语言函数忘记写返回值 c++函数没有返回值

请问C语言中一个函数没有return它返回什么?

首先是猜想,主流平台上,函数返回都是通过某个通用寄存器返回,x86平台是eax,arm是r0,所以猜想即使是void返回,如果硬是要得到返回值的话,应该是得到返回那一刻该寄存器的值。

创新互联公司成都企业网站建设服务,提供成都做网站、成都网站建设网站开发,网站定制,建网站,网站搭建,网站设计,自适应网站建设,网页设计师打造企业风格网站,提供周到的售前咨询和贴心的售后服务。欢迎咨询做网站需要多少钱:13518219792

证实:为了证实,需要写一点代码,一个最简单的void test(){},一个main(){printf("%d", test())},然而这样并不行,无法通过编译,需要使用手段,代码如下

void test()

{

return;

}

typedef int(*F)(void);

int main()

{

F f = (F)test;

printf("%d\n", f());

return 0;

}

对,就是把函数强制转换为返回int再调用,结果并不出人意料,是-858993460,这个数看起来没什么意义,不过转成16进制就有意义了,它是0xcccccccc,在VS的debug过程中,eax总是被初始化成这个值,堆栈内数组也是如此,同时它也是著名的"屯屯屯屯"的来源。

再把test改一下,进一步验证,试图让它返回0,办法是把eax变成0:

void test(){

int i = 1;

i--;

return;

}

猜想这次会输出0,因为i会放进eax里,再进行自减运算,结果也得到证实。

机器环境,win10 64bit,IDE,visual studio 2015 社区版。

希望有所帮助。

C语言中自定义的函数没有返回值会怎样?

这是错误,既然函数定义要返回值,就返回一个值,不返回结果是未知的 c语言可以允许这样的代码,c++视为错误

这是vc2017结果:

deubg模式结果是4,release结果是0, 所以这个代码没有意义

debug模式 结果是4

release模式 结果是0

C语言二级考试int函数没写return,会算错吗?

也可以这样:#includevoidmain()//void标识无返回值{inta,b,sum;a=1,b=2;sum=a+b;printf("sumis%d\n",sum);}

如果C语言中调用函数前面没有定义它的返回值类型

这种属于函数返回值的隐式声明。 隐式声明的函数返回值类型都是int 当然了,这个只需要了解一下就好了。不建议这么写。 现在很多编译器都不允许这样的声明出现。如果C语言中调用函数前面没有定义它的返回值类型


当前标题:c语言函数忘记写返回值 c++函数没有返回值
URL分享:http://jkwzsj.com/article/hhcphs.html

其他资讯