国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

遠(yuǎn)指針FAR/近指針NEAR/_STDCALL/_CDECL

2019-11-08 18:38:24
字體:
供稿:網(wǎng)友

今天看到inet_ntoa函數(shù)的原型,這個(gè)返回類型實(shí)在是沒見過:

char FAR* PASCAL FAR inet_ntoa(struct in_addr in);

搜索了一下:

1.關(guān)于FAR:(來自http://blog.csdn.NET/sphone89/article/details/7184976)

FAR 是16位系統(tǒng)時(shí)候的概念了,代表遠(yuǎn)指針的意思。

近指針是16位的指針,它只表示段內(nèi)的偏移地址,因而只能對(duì)64k字節(jié)數(shù)據(jù)段內(nèi)地址進(jìn)行存取。

  如 char near *p;

  p=(char near *)0xffff;

  遠(yuǎn)指針是32位指針,它表示段地址:偏移地址,如定義遠(yuǎn)程指針p指向B500段的2號(hào)地址,即B500:0002,則可寫作:

  char far *p;

  p=(char far *)0xB5000002;

  因此,遠(yuǎn)指針可以進(jìn)行跨段尋址,可以訪問整個(gè)內(nèi)存的地址。

     16位系統(tǒng)有遠(yuǎn)近指針之分的環(huán)境中,得告訴編譯器指針變量h_name強(qiáng)制使用遠(yuǎn)指針方式。因?yàn)?6位系統(tǒng)尋址范圍只有2^16=64K,所以用FAR指針,再加上16位,高16位存放的是變量的段地址,低16位存放變量的段內(nèi)偏移。

2.關(guān)于PASCAL(來自http://bbs.csdn.net/topics/333630中的回復(fù))

關(guān)于__stdcall和_cdecl(提到PASCAL)這兩個(gè)關(guān)鍵字看起來似乎很少和我們打交道,但是看了下面的定義(來自windef.h),你一定會(huì)覺得驚訝:    #define CALLBACK    __stdcall    #define WINAPI      __stdcall    #define WINAPIV     __cdecl    #define APIENTRY    WINAPI    #define APipRIVATE  __stdcall    #define PASCAL      __stdcall    #define cdecl _cdecl    #ifndef CDECL    #define CDECL _cdecl    #endif    幾乎我們寫的每一個(gè)WINDOWS API函數(shù)都是__stdcall類型的,為什么??    首先,我們談一下兩者之間的區(qū)別:      WINDOWS的函數(shù)調(diào)用時(shí)需要用到棧(STACK,一種先入后出的存儲(chǔ)結(jié)構(gòu))。當(dāng)函數(shù)調(diào)用完成后,棧需要清楚,這里就是問題的關(guān)鍵,如何清除??      如果我們的函數(shù)使用了_cdecl,那么棧的清除工作是由調(diào)用者,用COM的術(shù)語來講就是客戶來完成的。這樣帶來了一個(gè)棘手的問題,不同的編譯器產(chǎn)生棧的方式不盡相同,那么調(diào)用者能否正常的完成清除工作呢?答案是不能。      如果使用__stdcall,上面的問題就解決了,函數(shù)自己解決清除工作。所以,在跨(開發(fā))平臺(tái)的調(diào)用中,我們都使用__stdcall(雖然有時(shí)是以WINAPI的樣子出現(xiàn))。      那么為什么還需要_cdecl呢?當(dāng)我們遇到這樣的函數(shù)如fPRintf()它的參數(shù)是可變的,不定長(zhǎng)的,被調(diào)用者事先無法知道參數(shù)的長(zhǎng)度,事后的清除工作也無法正常的進(jìn)行,因此,這種情況我們只能使用_cdecl。      到這里我們有一個(gè)結(jié)論,如果你的程序中沒有涉及可變參數(shù),最好使用__stdcall關(guān)鍵字


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 梨树县| 嵩明县| 临潭县| 恭城| 西昌市| 商水县| 得荣县| 宜川县| 吉水县| 白山市| 甘泉县| 山丹县| 石阡县| 山东| 平利县| 兖州市| 习水县| 沙坪坝区| 凌源市| 绥滨县| 长白| 襄城县| 海原县| 浏阳市| 大洼县| 林西县| 鹿邑县| 五华县| 澄江县| 绥江县| 琼结县| 罗平县| 龙泉市| 大名县| 南充市| 锡林郭勒盟| 峨边| 冷水江市| 长岛县| 通河县| 武安市|