[000]C语言 K&R style definition

前几天,一个同事偶尔发出来一段有意思的代码,之前从来没见到过,算是收藏了,原来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()的调用之间,
调用其他函数,就可以改变堆栈或者寄存器内容,
这调用之后,出处结果就不一样了。