[000]C語言 K&R style definition

來源:互聯網
上載者:User

前幾天,一個同事偶爾發出來一段有意思的代碼,之前從來沒見到過,算是收藏了,原來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()的調用之間,
調用其他函數,就可以改變堆棧或者寄存器內容,
這調用之後,出處結果就不一樣了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.