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