新聞中心
本文由創(chuàng)新互聯(lián)(www.cdcxhl.com)小編為大家整理,本文主要介紹了c語言如何使用定義函數(shù)的相關(guān)知識,希望對你有一定的參考價值和幫助,記得關(guān)注和收藏網(wǎng)址哦!

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對石雕等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計(jì),網(wǎng)站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。
c語言如何使用定義函數(shù)?
1。我們可以在頭文件和主函數(shù)之間定義,并編寫方法程序。
2.
同樣,我們也可以把它寫在主函數(shù)之后。
3.
但是,此時系統(tǒng)會報(bào)告一個錯誤。
4.
如何解決這些錯誤?我們可以在主函數(shù)之前定義函數(shù)的定義句。
5.
這個定義必須以分號結(jié)束。
6.
接下來,我們可以開始編寫執(zhí)行過程了。
c語言函數(shù)如何調(diào)用一串字符?
可以通過函數(shù)scanf、printf、strcpy等調(diào)用一串字符。c語言函數(shù)調(diào)用規(guī)則?
在參數(shù)傳遞中,有兩個重要問題必須解釋清楚:1.當(dāng)參數(shù)個數(shù)多于一個時,參數(shù)按什么順序壓入堆棧;
2.函數(shù)被調(diào)用后,誰來把?;謴?fù)到原來的狀態(tài)?
在高級語言中,這兩個問題是通過調(diào)用函數(shù)來解釋的。的常見調(diào)用方法有:
stdcall cdecl fast call this call this call裸調(diào)用
以下是幾種呼叫方法:
1.stdcall
Stdcall調(diào)用模式也稱為Pascal調(diào)用模式。在微軟C系列的C/C編譯器中,使用PASCAL宏、WINAPI宏和CALLBACK宏來指定函數(shù)調(diào)用為stdcall。
stdcall方法的函數(shù)聲明是:
int _stdcall函數(shù)(int a,int b);
調(diào)用stdcall的意味著:
(1)參數(shù)一次從右向左壓入堆棧。
(2)被調(diào)用的函數(shù)本身恢復(fù)堆棧。
(3)函數(shù)名自動加下劃線,前加下劃線,后加@,后加參數(shù)大小。
上面的函數(shù)翻譯成匯編語言就會變成:
b先推第二個參數(shù)。
再次按下第一個參數(shù)。
調(diào)用函數(shù)調(diào)用函數(shù)
在編譯時,這個函數(shù)的名字被翻譯成_function@8。
2.cdecl
Cdecl調(diào)用模式,也稱為C調(diào)用模式,是C語言的默認(rèn)調(diào)用模式,其語法為:
Int function(int a,int b)///不帶修飾符,是C調(diào)用的
Int _cdecl function(int a,int b) //在c中顯式指定調(diào)用。
調(diào)用cdecl的決定了:
(1)參數(shù)從右向左壓入堆棧。
(2)調(diào)用者恢復(fù)堆棧。
(3)函數(shù)名自動加前導(dǎo)下劃線。
因?yàn)檎{(diào)用者還原堆棧,所以C調(diào)用所允許的函數(shù)的參數(shù)個數(shù)是不固定的,這是C語言的一大特點(diǎn)。
這種的功能翻譯過來就是:
b//先推第二個參數(shù)
a//推送第一個參數(shù)
調(diào)用函數(shù)//調(diào)用函數(shù)
添加,8//清除堆棧
在編譯時,這種的函數(shù)被翻譯成:_function。
3.快速呼叫
Fastcall從名字就可以知道,是一種快捷的調(diào)用。以這種傳遞函數(shù)的第一和第二DWORD參數(shù)通過ecx和edx,
以下參數(shù)從右向左推入堆棧。
被調(diào)用的函數(shù)清除堆棧。
函數(shù)名修改的規(guī)則與stdcall相同。
它的聲明語法是:
int fastcall函數(shù)(int a,int b);
4.這通
Thil調(diào)用方法是唯一不能顯示指定修飾符的方法。它是C類成員函數(shù)的默認(rèn)調(diào)用方法。因?yàn)槌蓡T函數(shù)調(diào)用也有這個指針,所以必須用這種特殊的調(diào)用。
調(diào)用thil的方法意味著:
參數(shù)從右向左推入堆棧。
如果參數(shù)個數(shù)確定,這個指針通過ecx傳遞給被調(diào)用者;如果參數(shù)個數(shù)不確定,那么在所有參數(shù)都被推入堆棧后,這個指針被推入堆棧。
如果參數(shù)個數(shù)不確定,調(diào)用者會清空堆棧,否則函數(shù)會自己清空堆棧。
可以看出,當(dāng)參數(shù)個數(shù)固定時,類似于stdcall,不固定時,類似于cdecl。
5.裸呼
是一種比較少見的調(diào)用方法,在一般的高級編程語言中并不常見。
函數(shù)聲明的調(diào)用必須與實(shí)際調(diào)用一致,這必然會導(dǎo)致編譯器的混亂。
函數(shù)名修改規(guī)則:
1.c編譯時函數(shù)名修飾約定規(guī)則:
__stdcall調(diào)用約定在輸出函數(shù)名前添加一個下劃線前綴,后跟一個 "@ "符號及其參數(shù)的字節(jié)數(shù),格式為_function@8。
__cdecl調(diào)用約定只給輸出函數(shù)名加一個下劃線前綴,格式為_function。
__fastcall調(diào)用約定添加了一個 "@ "符號,后面跟一個 "@ "符號及其參數(shù)的字節(jié)數(shù)。格式是@function@8。
它們不改變輸出函數(shù)名中字符的大小寫,這與PASCAL調(diào)用約定不同,PASCAL調(diào)用約定規(guī)定輸出函數(shù)名全部大寫,不做任何修改。
2.c編譯時函數(shù)名修飾約定規(guī)則:
__stdcall調(diào)用約定:
(1)從 "? "識別函數(shù)名的開頭,后面跟著函數(shù)名;
(2)與"@ @ YG amp;"在函數(shù)名后標(biāo)記參數(shù)表的開頭,后面跟著參數(shù)表;
(3)參數(shù)表用代號表示:
X - void,
d字符,電子無符號字符,
F - short,
H - int,
I -無符號整數(shù),
j龍,
K -無符號長整型,
m浮動,
n倍,
_N - bool,
....
PA -表示指針,后面的代碼表示指針類型。如果同一類型的指針連續(xù)出現(xiàn),它將被替換為 "0 ",以及a "0 "將被替換。
表格重復(fù)一次;
(4)參數(shù)表中第一項(xiàng)是函數(shù)的返回值類型,后面是參數(shù)的數(shù)據(jù)類型,指針標(biāo)記在它所引用的數(shù)據(jù)類型之前;
(5)全稱的末尾標(biāo)有 "@ Z "參數(shù)表后。如果函數(shù)沒有參數(shù),它以 "z "。
格式是 "?姓名@ @ yg * * * * @ z "or "?函數(shù)@ @ yg * xz "比如說
int Test1(char *var1,unsigned long) -&";?Test1@@YGHPADK@Z &";
void Test2() -&";?Test2@@YGXXZ &";
__cdecl調(diào)用約定:
It 與上面的_stdcall調(diào)用約定相同,只是參數(shù)表的起始標(biāo)識符從 "@ @ YG amp;"以上為 "@ @ YA "。
__fastcall呼叫約定:
它與規(guī)則上面的_stdcall的調(diào)用約定相同,只是參數(shù)表的起始標(biāo)識符從 "@ @ YG amp;"以上為 "@ @ YI "。
VC函數(shù)的默認(rèn)聲明是 "_ _ cedcl ",只能由C/C調(diào)用。
c語言函數(shù)的定義與調(diào)用?
1。該函數(shù)立即調(diào)用執(zhí)行模式。
2.
通過構(gòu)造函數(shù)創(chuàng)建一個對象,然后調(diào)用自己的方法。
3.
通過構(gòu)造函數(shù)調(diào)用函數(shù)。
當(dāng)前文章:c語言如何使用定義函數(shù)?(c語言函數(shù)如何調(diào)用一串字符?)
文章分享:http://m.fisionsoft.com.cn/article/cossede.html


咨詢
建站咨詢
