c语言入门函数调用问题,为什么没有return a;第一回返回7,第二回返回4?这个4是怎么算的?

必采纳!int ss(int a);int ss(int a){ a=a+2; printf("%d\n",a); //return a; //如果没这return a;句返回第一个正确,第二个就错误}int main(){ int a=5; ss(ss(a)); return 0;}

1)正常情况下,如果没有return,代码至少应有警告级别以上的提示。假如编译器只是给出一个警告而不升级为错误,就看2)
2)从稍低一层的角度来说,函数的返回值一般放于EAX寄存器。这就是说,即使ss(a)没有提供返回值,EAX中的值仍代表了返回值,只不过它的值此时可能只是一个临时值。在以上代码中,这个值为2。故下一次ss(2)就输出了4追问

感谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-04-07
行为未定义,返回值4是一个未知数,即然写明了返回类型,就别钻牛角了
打个比方,汇编中用寄存器eax保存返回值,如果ss函数没指明返回值(即没更改eax的值),所以返回的eax的当前值是未知的追问

谢谢您

相似回答