前几天,一个同事偶尔发出来一段有意思的代码,之前从来没见到过,算是收藏了,原来C中还可以这样定义的
code:
#include<stdio.h> void function(arg1, arg2) int arg1; int arg2; { printf("arg1=%d, arg2=%d", arg1, arg2); } int main(){ function(1,2); function(1); function(); return 0; }
---------------------------------------------------------------
输出:
arg1=1, arg2=2
arg1=1, arg2=2
arg1=1, arg2=2
------------------------------------
你也可以试试,调换一下函数调用顺序,如下:
function();
function(1);
function(1,2);
输出如下:
arg1=134513424, arg2=134513755
arg1=1, arg2=134513755
arg1=1, arg2=2
原因并不是函数有什么记忆功能,而是因为函数调用时,
堆栈上的内容(或者通用寄存器)没有被改变,
所以输出是一样的。至于每次输出结构是否一样,
是依据编译器和硬件而不一样的。
如果在function(1)和function()的调用之间,
调用其他函数,就可以改变堆栈或者寄存器内容,
这调用之后,出处结果就不一样了。