国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 福鼎市| 杂多县| 湖南省| 石阡县| 光泽县| 峨眉山市| 台湾省| 兴义市| 新兴县| 海南省| 垦利县| 新巴尔虎左旗| 崇信县| 高雄市| 旌德县| 澎湖县| 英山县| 张家川| 宁陵县| 古丈县| 呼伦贝尔市| 宽城| 松桃| 霍林郭勒市| 平果县| 英吉沙县| 丰镇市| 林口县| 济源市| 宁化县| 建阳市| 额尔古纳市| 辽宁省| 乌鲁木齐县| 沁水县| 曲沃县| 巴中市| 南平市| 邛崃市| 鹿泉市| 竹山县|