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