关键字PASCAL
VC里面:PASCAL==CALLBACK==WINAPI==__stdcall
? ?? ?? ?? ?_stdcall是Pascal程序的缺省調(diào)用方式,通常用于Win32? ?Api中,函數(shù)采用從右到左的壓棧方式,自己在退出時(shí)清空堆棧。VC將函數(shù)編譯后會(huì)在函數(shù)名前面加上下劃線前綴,在函數(shù)名后加上"@"和參數(shù)的字節(jié)數(shù)。
? ?? ?_cdecl是C和C++程序的缺省調(diào)用方式。每一個(gè)調(diào)用它的函數(shù)都包含清空堆棧的代碼,所以產(chǎn)生的可執(zhí)行文件大小會(huì)比調(diào)用_stdcall函數(shù)的大。函數(shù)采用從右到左的壓棧方式。VC將函數(shù)編譯后會(huì)在函數(shù)名前面加上下劃線前綴。是MFC缺省調(diào)用約定。?
? ?? ?? ?? ?關(guān)于PASCAL,其實(shí)你只要弄明白一點(diǎn)就行了:聲明為這種調(diào)用約定的函數(shù)都是由它本身來清棧,而__cdecl的函數(shù)都是由調(diào)用者來清棧。?
? ??
? ?實(shí)際用的時(shí)候,個(gè)人覺得兩者最大的差別在于:__cdecl的函數(shù)參數(shù)個(gè)數(shù)可以聲明為不確定,比如printf,scanf之類,而PASCAL的函數(shù)是不可以這樣做的,如果這樣的話它不知道實(shí)參有多少個(gè)。
? ?? ?? ?? ?_stdcall是Pascal程序的缺省調(diào)用方式,通常用于Win32? ?Api中,函數(shù)采用從右到左的壓棧方式,自己在退出時(shí)清空堆棧。VC將函數(shù)編譯后會(huì)在函數(shù)名前面加上下劃線前綴,在函數(shù)名后加上"@"和參數(shù)的字節(jié)數(shù)。
? ?? ?_cdecl是C和C++程序的缺省調(diào)用方式。每一個(gè)調(diào)用它的函數(shù)都包含清空堆棧的代碼,所以產(chǎn)生的可執(zhí)行文件大小會(huì)比調(diào)用_stdcall函數(shù)的大。函數(shù)采用從右到左的壓棧方式。VC將函數(shù)編譯后會(huì)在函數(shù)名前面加上下劃線前綴。是MFC缺省調(diào)用約定。?
? ?? ?? ?? ?關(guān)于PASCAL,其實(shí)你只要弄明白一點(diǎn)就行了:聲明為這種調(diào)用約定的函數(shù)都是由它本身來清棧,而__cdecl的函數(shù)都是由調(diào)用者來清棧。?
? ??
? ?實(shí)際用的時(shí)候,個(gè)人覺得兩者最大的差別在于:__cdecl的函數(shù)參數(shù)個(gè)數(shù)可以聲明為不確定,比如printf,scanf之類,而PASCAL的函數(shù)是不可以這樣做的,如果這樣的話它不知道實(shí)參有多少個(gè)。
總結(jié)
- 上一篇: 1.3多媒体存储技术
- 下一篇: 费曼先生 找数学家“麻烦”