什么是函數調用函數調用的形式
什么是函數調用函數調用的形式
函數調用是指計算機編譯或運行時,使用某個函數來完成相關命令。那么你對函數調用了解多少呢?以下是由學習啦小編整理關于什么是函數調用的內容,希望大家喜歡!
函數調用的一般形式
在程序中通過對函數的調用來執(zhí)行函數體,其過程與其它語言的子程序調用相似。
C語言中,函數調用的一般形式為:
函數名(實際參數表)
對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變量或其它構造類型數據及表達式。各實參之間用逗號分隔。
函數調用包括的內容
函數表達式
函數作為表達式中的一項出現在表達式中,以函數返回值參與表達式的運算。這種方式要求函數是有返回值的。例如:z=max(x,y)是一個賦值表達式,把max的返回值賦予變量z。
函數調用的實際實現
指針寄存器
EBP
EBP是所謂的幀指針,指向當前活動記錄的上方(上一個活動記錄的最下方)
ESP
ESP是所謂的棧指針,指向當前活動記錄的最下方(下一個將要插入的活動記錄的最上方)
這兩個指針的值規(guī)定了當前活動記錄的位置
參數傳遞
將函數參數壓棧:mov eax,dword ptr [n] ;(n為參數變元)
push eax
操作
函數調用將執(zhí)行如下操作:
?、睂羔槈喝霔V校簆ush ebp
⒉使得幀指針等于棧指針:mov ebp,esp
?、呈箺V羔樧詼p,自減得到的內存地址應當能夠(足夠)用來存儲被調用函數的本地狀態(tài):sub esp,0CCh
注意:0CCh為0xCC,隨著具體函數的不同而不同。
傳入保存狀態(tài)
push ebx ;保存ebx寄存器的值
push esi ;保存esi寄存器的值
push edi ;保存edi寄存器的值
函數語句
函數調用的一般形式加上分號即構成函數語句。例如: printf ("%d",a);scanf ("%d",&b);都是以函數語句的方式調用函數。
函數實參
函數作為另一個函數調用的實際參數出現。這種情況是把該函數的返回值作為實參進行傳送,因此要求該函數必須是有返回值的。例如: printf("%d",max(x,y)); 即是把max調用的返回值又作為printf函數的實參來使用的。在函數調用中還應該注意的一個問題是求值順序的問題。所謂求值順序是指對實參表中各量是自左至右使用呢,還是自右至左使用。對此,各系統(tǒng)的規(guī)定不一定相同。介紹printf 函數時已提到過,這里從函數調用的角度再強調一下。
看過“函數調用的形式”的人還看了: