以前知道類的成員函數(shù)在調(diào)用時(shí)會(huì)傳入一個(gè)this指針,而不曉得thiscall就是專門指定了這種調(diào)用方式。__cdecl調(diào)用方式即為C,C++默認(rèn)的調(diào)用方式。
成都創(chuàng)新互聯(lián)主營(yíng)恭城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā),恭城h5微信小程序定制開(kāi)發(fā)搭建,恭城網(wǎng)站營(yíng)銷推廣歡迎恭城等地區(qū)企業(yè)咨詢
C語(yǔ)言中調(diào)用函數(shù)的方法及步驟:工具/原料:C語(yǔ)言 首先需要輸入想要調(diào)用的函數(shù)。然后當(dāng)輸入一個(gè)括號(hào)后,即可觀察他的參數(shù)。接著在對(duì)應(yīng)的參數(shù)中輸入?yún)?shù)值。然后,系統(tǒng)會(huì)發(fā)生一個(gè)警告。
從以上調(diào)用Input函數(shù)的過(guò)程可以看出:在調(diào)用此函數(shù)之前,首先壓棧ebp-8,然后壓棧ebp-4,然后調(diào)用函數(shù)Input,最后Input函數(shù)調(diào)用結(jié)束后,利用esp+8恢復(fù)棧。由此可見(jiàn),在C語(yǔ)言調(diào)用中默認(rèn)的函數(shù)修飾_cdecl,由主調(diào)用函數(shù)進(jìn)行參數(shù)壓棧并且恢復(fù)堆棧。
1、01 打開(kāi)Ubuntu,并在目標(biāo)路徑下開(kāi)啟一個(gè)終端。
2、在使用一個(gè)函數(shù)之前必須先對(duì)他進(jìn)行聲明://void B();聲明B函數(shù)的存在。void A(){B();//非法,程序執(zhí)行到此時(shí)并不知道B函數(shù)的存在。
3、打開(kāi)CFree,按ctrl加N創(chuàng)建一個(gè)新的文件。然后開(kāi)始調(diào)用函數(shù)。按F9進(jìn)行調(diào)試后發(fā)現(xiàn)沒(méi)有錯(cuò)誤。按F5執(zhí)行程序。輸入想要輸入的數(shù)字。按ENTER鍵輸出結(jié)果,檢驗(yàn)符合結(jié)果,說(shuō)明函數(shù)調(diào)用成功。
函數(shù)參數(shù)是從右向左線性連續(xù)依次入棧,如果我們可以知道可變參數(shù)列表的前一個(gè)參數(shù)的地址和類型,就可以得知可變參數(shù)列表的首地址,進(jìn)而根據(jù)每個(gè)參數(shù)的類型取出相應(yīng)的數(shù)據(jù)。
va_list: 可變參數(shù)列表指針。va_start:獲取可變參數(shù)列表的第一個(gè)參數(shù)的地址。va_arg:獲取可變參數(shù)的當(dāng)前參數(shù),返回指定類型并將指針指向下一參數(shù)。va_end:清空va_list可變參數(shù)列表。
正好和動(dòng)態(tài)參數(shù)個(gè)數(shù)的方向相反。因此,c語(yǔ)言函數(shù)參數(shù)采用自右向左的入棧順序,主要原因是為了支持可變長(zhǎng)參數(shù)形式。