




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、cc+函數(shù)調(diào)用的方式有哪些c/c+函數(shù)調(diào)用的方式有哪些棧是一種先進后出的數(shù)據(jù)結(jié)構(gòu),棧有一個存儲區(qū)、一個棧頂指針。 棧頂指針指向堆棧中第一個可用的數(shù)據(jù)項(被稱為棧頂)。用戶可以 在棧頂上方向棧中加入數(shù)據(jù),這個操作被稱為壓棧(push),壓棧以 后,棧頂自動變成新加入數(shù)據(jù)項的位置,棧頂指針也隨之修改。用 戶也可以從堆棧中取走棧頂,稱為彈出棧(pop),彈出棧后,棧頂下 的一個元素變成棧頂,棧頂指針隨之修改。函數(shù)調(diào)用時,調(diào)用者依 次把參數(shù)壓棧,然后調(diào)用函數(shù),函數(shù)被調(diào)用以后,在堆棧中取得數(shù) 據(jù),并進行計算。函數(shù)計算結(jié)束以后,或者調(diào)用者,或者函數(shù)本身 修改堆棧,使堆?;謴?fù)原裝。在參數(shù)傳遞中,有兩個重要的
2、問題必須要明確說明:1 .當(dāng)參數(shù)個數(shù)多于一個時,按照什么順序把參數(shù)壓入堆棧;2 .函數(shù)調(diào)用后,由誰來把堆棧恢復(fù)原狀。在高級語言中,就是通過函數(shù)的調(diào)用方式來說明這兩個問題的。 常見的調(diào)用方式有:stdcallcdeclfastcallthiscallthiscallnakedcall下面就分別介紹這幾種調(diào)用方式:1.stdcallstdcall調(diào)用方式又被稱為pascal調(diào)用方式。在microsoftc+ 系列的c/c+編譯器中,使用pascal宏,winapi宏和callback宏 來指定函數(shù)的調(diào)用方式為stdcallostdcall調(diào)用方式的, 函數(shù)聲明為:int_stdcallfuncti
3、on(inta, intb);stdcall的調(diào)用方式意味著:(1)參數(shù)從右向左一次壓入堆棧(2)由被調(diào)用函數(shù)自己來恢復(fù)堆棧(3)函數(shù)名自動加前導(dǎo)下劃線,后面緊跟著一個,其后緊跟著參 數(shù)的尺寸上而那個函數(shù)翻譯成匯編語言將變成:pushb先壓入第二個參數(shù)pusha再壓入第一個參數(shù)callfunction調(diào)用函數(shù)在編譯時,此函數(shù)的名字被翻譯為_function82. cdeclintfunction(inta, intb)不加修飾符就是c調(diào)用方式int_cdeclfunction(inta, intb)明確指定用 c 調(diào)用方式cdecl的調(diào)用方式?jīng)Q定了:(1)參數(shù)從右向左依次壓入堆棧(2)由調(diào)用者
4、恢復(fù)堆棧(3)函數(shù)名自動加前導(dǎo)下劃線由于是由調(diào)用者來恢復(fù)堆棧,因此c調(diào)用方式允許函數(shù)的參數(shù)個 數(shù)是不固定的,這是c語言的一大特色。此方式的函數(shù)被翻譯為:pushb 先壓入第二個參數(shù)pusha 在壓入第一個參數(shù)callfuntion 調(diào)用函數(shù)addesp, 8清理堆棧在編譯時,此方式的函數(shù)被翻譯成:function3. fastcallfastcall按照名字上理解就可以知道,它是一種快速調(diào)用方式。 此方式的函數(shù)的第一個和第二個dword參數(shù)通過ecx和edx傳遞,后而的參數(shù)從右向左的順序壓入棧。被調(diào)用函數(shù)清理堆棧。函數(shù)名修個規(guī)則同stdcall其聲明語法為:intfastcallfunctio
5、n(inta, intb);4. thiscallthiscall調(diào)用方式是唯一一種不能顯示指定的修飾符。它是c+ 類成員函數(shù)缺省的調(diào)用方式。由于成員函數(shù)調(diào)用還有一個this指針, 因此必須用這種特殊的調(diào)用方式。thiscall調(diào)用方式意味著:參數(shù)從右向左壓入棧。如果參數(shù)個數(shù)確定,this指針通過ecx傳遞給被調(diào)用者;如果參 數(shù)個數(shù)不確定,this指針在所有參數(shù)壓入棧后被壓入棧。參數(shù)個數(shù)不定的,由調(diào)用者清理堆棧,否則由函數(shù)自己清理堆棧??梢钥吹?,對于參數(shù)個數(shù)固定的情況,它類似于stdcall,不定 時則類似于cdecl。5. nakedcall是一種比較少見的調(diào)用方式,一般高級程序設(shè)計語言中不
6、常見。函數(shù)的聲明調(diào)用方式和實際調(diào)用方式必須一致,必然編譯器會產(chǎn) 生混亂。函數(shù)名字修改規(guī)則:1. c編譯時函數(shù)名修飾約定規(guī)則:_stdcall調(diào)用約定在輸出函數(shù)名前加上一個下劃線前綴,后面 加上一個“”符號和其參數(shù)的字節(jié)數(shù),格式為_function8。_cdecl調(diào)用約定僅在輸出函數(shù)名前加上一個下劃線前綴,格式 為function。_fastcall調(diào)用約定在輸出函數(shù)名前加上一個“十 符號,后面 也是一個符號和其參數(shù)的字節(jié)數(shù),格式為function8。它們均不改變輸出函數(shù)名中的字符大小寫,這和pascal調(diào)用約 定不同,pascal約定輸出的函數(shù)名無任何修飾且全部大寫。2. c+編譯時函數(shù)名修飾
7、約定規(guī)則:stdcall調(diào)用約定:(1)以“?”標識函數(shù)名的開始,后跟函數(shù)名;(2)函數(shù)名后面以“yg”標識參數(shù)表的開始,后跟參數(shù)表;(3)參數(shù)表以代號表示:x-void,dchar,e-unsignedchar,f-short,hint,i-unsignedintj-long,k-unsignedlong,m一float,n-double,_n-bool.pa一表示指針,后面的代號表明指針類型,如果相同類型的指針 連續(xù)出現(xiàn),以“0”代替,一個“0”代表一次重復(fù);(4)參數(shù)表的第一項為該函數(shù)的返回值類型,其后依次為參數(shù)的 數(shù)據(jù)類型,指針標識在其所指數(shù)據(jù)類型前;(5)參數(shù)表后以“z”標識整個名字的結(jié)束,如果該函數(shù)無參數(shù), 則以“z”標識結(jié)束。inttestl(charivari, unsignedlong)?testlyghpadkz”voidtest2() “?test2ygxxz”cdecl調(diào)用約定:規(guī)則同上面的_stdcall調(diào)用約
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 車輛質(zhì)押貸款專項:二手車質(zhì)物抵押借款合同
- 企業(yè)團結(jié)的課件教學(xué)
- 餐飲門店裝修設(shè)計租賃服務(wù)合同
- 企業(yè)四新教育課件
- 農(nóng)產(chǎn)品存放租賃及保鮮服務(wù)合同
- 旅游度假村場推廣運營合同
- 高速鐵路站場場地與高鐵設(shè)備租賃服務(wù)協(xié)議
- 沉井基礎(chǔ)施工勞務(wù)合作及施工技術(shù)支持服務(wù)合同
- 青春相關(guān)面試題及答案
- 魚塘捕魚測評方案
- 數(shù)字化管理師復(fù)習(xí)測試卷附答案
- 甘肅省安全員《B證》考試題庫及答案
- 數(shù)據(jù)結(jié)構(gòu)C語言版(第2版)嚴蔚敏人民郵電出版社課后習(xí)題答案
- 消費者需求導(dǎo)向的改裝車品牌建設(shè)-洞察分析
- 教育培訓(xùn)機構(gòu)傭金分配方法
- 《建設(shè)工程監(jiān)理規(guī)范表式》及上海市行業(yè)協(xié)會在用表
- 《起重機械安全技術(shù)規(guī)程》(TSG51-2023)知識培訓(xùn)
- 工業(yè)地產(chǎn)租房合同模板
- 文章之美(2022年遼寧盤錦中考語文試卷議論文閱讀題及答案)
- 湖南省邵陽市海誼中學(xué)2024-2025學(xué)年高一上學(xué)期分班考試數(shù)學(xué)試題(原卷版)
- 2024-2030年中國DevOps工具行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
評論
0/150
提交評論