gcc编译怎么写无返回值的函数

1.为什么子函数没有写返回值也可以输出正确VS上编译错误,在gcc上的确是会返回正确的结果 。
看了gcc的反汇编代码,明白了原因 。gcc在实现 a > b 这样的操作的时候,会把一个操作数放eax寄存器,然后z =a 时,会利用eax作中转,意思是先把a的值放eax,然后再由eax复制到z的内存中 。
一般函数都是通过eax寄存器来返回值的,所以main函数中可以顺利的拿到z的值 。
原因是知道了,不过这行为挺诡异的啊 。
如果不相信我的解释,你可以试试再看一个类似判断,你看看最后的返回值是什么就明白了 。
2.C语言程序中,没有返回值的函数如何把运算结果返回给主函数的void swap(int*a,int*b)
{
int t;
t=*a; *a=*b; *b=t;
}
main()
{
int x=10,y=20;
printf("(1)x=%d y=%d\n",x,y);
swap(&x,&y);
printf("(2)x=%d y=%d\n",x,y);
}
这个输出结果是:(1)x=10 y=20
(2)x=20 y=10
这个是址传递,如果是值传递值肯定不会传回给主函数,而地址传递要看交换的是谁,可能会传回也可能不回 。
这个题:把x的地址和y的地址给指针变量a,b,就说明a 指向了x,b指向了y,在swap函数里是把数据进行交换了也就是说把x\y交换了(*a表示取a所指变量的内容,*b同理!)执行完之后输出x,y就是交换后的
【gcc编译怎么写无返回值的函数】

gcc编译怎么写无返回值的函数

文章插图