日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

關(guān)于#define的初級問題

 accesine 2005-08-09
windef.h中第一行寫到:
#ifndef _WINDEF_
#define _WINDEF_
意思是說如果沒定義_WINDEF_,則定義_WINDEF_
我翻了一下C語言的書,76頁,寫到:
宏定義的形式如下:
#define 名字>>替換文本
可上句中的#define _WINDEF_,名稱有了,替換文本是什么呢?是空白嗎?
這樣做的目的是什么呢?
另外:
_cdecl
__stdcall
是什么?
再另外這是什么意思?
#ifdef STRICT
typedef void NEAR* HGDIOBJ;
#else
DECLARE_HANDLE(HGDIOBJ);
#endif
不好意思,問了這么多菜問題。謝謝各位


_cdecl 
按從右至左的順序壓參數(shù)入棧,由調(diào)用者把參數(shù)彈出棧。對于“C”函數(shù)或者變量,修飾名是在函數(shù)名前加下劃線。對于“C++”函數(shù),有所不同。 
如函數(shù)void test(void)的修飾名是_test;對于不屬于一個類的“C++”全局函數(shù),修飾名是?test@@ZAXXZ。 
這是MFC缺省調(diào)用約定。由于是調(diào)用者負責把參數(shù)彈出棧,所以可以給函數(shù)定義個數(shù)不定的參數(shù),如printf函數(shù)。 
_stdcall 
按從右至左的順序壓參數(shù)入棧,由被調(diào)用者把參數(shù)彈出棧。對于“C”函數(shù)或者變量,修飾名以下劃線為前綴,然后是函數(shù)名,然后是符號“@”及參數(shù)的字節(jié)數(shù),如函數(shù)int func(int a, double b)的修飾名是_func@12。對于“C++”函數(shù),則有所不同。 


看看http://dev.csdn.net/develop/article/19/19460.shtm


順便學習!


#ifndef identifier
your code
#endif
如果identifier為一個未定義的符號,your code就會被編譯,否則剔除 
#ifdef identifier
your code1
#else
your code2
#endif
如果identifier為一個定義了的符號,your code1就會被編譯,否則your code2就會被編譯


#define 名字>>替換文本 只是一種用法
如果不關(guān)心名字用什么東西替換,而只關(guān)心名字是否定義了的話,就直接使用
#define 名字 就行了


我可能沒說明白我的第三個問題
我其實想問的是
typedef void NEAR* HGDIOBJ;是將哪個定義成哪個了?
一般情況是typedef 類型>>別名。上句中類型是什么?別名是什么?為什么有三個表達式
DECLARE_HANDLE(HGDIOBJ);是什么意思?
第一個問題怎么沒人解釋?謝謝


arrowcy(長弓手) 
“#define 名字”的目的是什么?又做了什么?還是什么也不做?假如我在程序中用了“名字”,那么會被替換嗎?
如果我不用的話,只是定義了有什么意義?


在DOS下,所有地址都可以表示為“段:段內(nèi)偏移量”的方式,即XXXX:XXXX。如果在段內(nèi)部進行操作使用near指針,即段采用當前的數(shù)據(jù)段,而指針地址為段內(nèi)偏移量,這樣通常更快些,但是所能表示的地址范圍有限。為了表示更廣的范圍,可以使用far*(遠指針),就是不管當前的數(shù)據(jù)段是什么,采用XXXX:XXXX的方式指明地址。 
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name


呵呵,我不是說了嗎?
#ifndef identifier
your code
#endif
如果identifier為一個未定義的符號,your code就會被編譯,否則剔除 
而這里的your code就是
#define _WINDEF_
...//那個類的頭文件其他的代碼,你一定沒有注意那個頭的最后一行有#endif
是用來防止重復包含的,如果定義了_WINDEF_哪后面代碼(頭文件里面的其他的代碼,)就不會被編譯


typedef void NEAR* HGDIOBJ;是將哪個定義成哪個了?
typedef是用來定義新的整數(shù)類型
將HGDIOBJ定義為void NEAR*


明白點兒了,雖然沒全懂,呵。我再消化消化,謝謝各位!!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多