青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

twzheng's cppblog

『站在風(fēng)口浪尖緊握住鼠標(biāo)旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評(píng)論 :: 0 Trackbacks

首先我們來看看下面這個(gè)例子:
typedef int * int_ptr;
#define INT_PTR int *
const int_ptr p; //p不可更改,但p指向的內(nèi)容可更改
const INT_PTR p; //p可更改,但是p指向的內(nèi)容不可更改
int_ptr是一種類型(類型本身就是整型指針),const int_ptr p就是把指針給鎖住了p不可更改,而const INT_PTR p是const int * p鎖的是指針p所指的對(duì)象。這些使用常常使我迷惑,所以搜集整理對(duì)他們的理解如下:

#define的用法:

1、簡(jiǎn)單的宏定義
#define MAXTIME 1000
一個(gè)簡(jiǎn)單的MAXTIME就定義好了,它代表1000,如果在程序里面寫:
if(i<MAXTIME){}
編譯器在處理這個(gè)代碼之前會(huì)對(duì)MAXTIME進(jìn)行處理替換為1000。
這樣的定義看起來類似于普通的常量定義const,但也有著不同,因?yàn)閐efine的定義只是簡(jiǎn)單的替換,而不是作為一個(gè)量來使用,這個(gè)問題在下面反映的尤為突出。

2、帶參數(shù)的宏
define可以像函數(shù)那樣接受一些參數(shù),如下:
#define max(x,y) (x)>(y)?(x):(y);
它將返回兩個(gè)數(shù)中較大的那個(gè),這個(gè)“函數(shù)”沒有類型檢查,就好像一個(gè)函數(shù)模板似的,當(dāng)然,不難看出它絕對(duì)沒有模板那么安全。
因?yàn)檫@樣做的話存在隱患,例子如下:
#define Add(a,b) a+b;
一般的單獨(dú)使用是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時(shí)候就會(huì)出現(xiàn)問題,代數(shù)式的本意是a+b然后和c,d相乘,但是因?yàn)槭褂昧薲efine(它只是一個(gè)簡(jiǎn)單的替換),所以式子實(shí)際上變成了c*a + b*d 。
再看看這個(gè)例子:
#define int_ptr int *;
int_ptr a,b;
本意是a和b都是int型指針,但是實(shí)際上變成
int* a,b;
a是int型指針,而b是int型變量。這時(shí)應(yīng)該使用typedef定義:
typedef int* int_ptr;
int_ptr a,b;
這樣a和b就都是int型指針了。

3、define的多行定義
define可以替代多行的代碼,例如MFC中的宏定義(非常的經(jīng)典,雖然讓人看了惡心)
#define MACRO(arg1, arg2) do { \
/* declarations */ \
stmt1; \
stmt2; \
/*  */ \
while(0/* (no trailing ; ) */
關(guān)鍵是要在每一個(gè)換行的時(shí)候加上一個(gè)"\"。

4、在大規(guī)模的開發(fā)過程中,特別是跨平臺(tái)和系統(tǒng)的軟件里,define最重要的功能是條件編譯。
#ifdef WINDOWS


#endif
#ifdef LINUX


#endif
可以在編譯的時(shí)候通過#define設(shè)置編譯環(huán)境

5、如何定義宏、取消宏
//定義宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]
//普通宏
#define PI (3.1415926)
//帶參數(shù)的宏
#define max(a,b) ((a)>(b)? (a),(b))
關(guān)鍵是十分容易產(chǎn)生錯(cuò)誤,包括機(jī)器和人理解上的差異等等。

6、條件編譯
#ifdef XXX…(#else) …#endif
例如:
#ifdef DV22_AUX_INPUT
#define AUX_MODE 3
#else
#define AUY_MODE 3
#endif


define和typedef的區(qū)別:

1、 #define是預(yù)處理指令,在編譯預(yù)處理時(shí)進(jìn)行簡(jiǎn)單的替換,不作正確性檢查,不管含義是否正確照樣帶入,只有在編譯已被展開的源程序時(shí)才會(huì)發(fā)現(xiàn)可能的錯(cuò)誤并報(bào)錯(cuò)。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 會(huì)替換為3.1415926*r*r
如果你把#define語句中的數(shù)字9 寫成字母g 預(yù)處理也照樣帶入。

2、typedef是在編譯時(shí)處理的。它在自己的作用域內(nèi)給一個(gè)已經(jīng)存在的類型一個(gè)別名,但是You cannot use the typedef specifier inside a function definition。

3、 
typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說,#define在預(yù)處理時(shí)只是進(jìn)行簡(jiǎn)單的替換,而typedef不是簡(jiǎn)單替換 ,而是采用如同定義變量的方法那樣來聲明一種類型。重復(fù)前面的例子:
#define int_ptr int *
int_ptr a,b; 
//相當(dāng)于int * a, b; 只是簡(jiǎn)單的宏替換,a是整型指針,而b之是整型變量
typedef int * int_ptr;
int_ptr a,b; 
//a, b 都為指向int的指針,typedef為int* 引入了一個(gè)新的助記符

4、也許您已經(jīng)注意到#define不是語句,不要在行末加分號(hào),否則會(huì)連分號(hào)一塊置換;但是typedef結(jié)束必須加分號(hào),因?yàn)樗钦Z句。


posted on 2007-04-17 02:30 譚文政 閱讀(1572) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 基礎(chǔ)知識(shí)

評(píng)論

# re: 理解#define和typedef 2007-04-22 15:43 heweitykc
兄弟,長(zhǎng)大的嗎?校友!  回復(fù)  更多評(píng)論
  

# re: 理解#define和typedef 2007-04-23 02:37 苦味酸
@heweitykc
兄弟,你怎么曉得我是長(zhǎng)江大學(xué)的呢,你是長(zhǎng)大哪一屆的?我是長(zhǎng)大東校區(qū)計(jì)算機(jī)專業(yè)的,今年畢業(yè)  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲电影在线看| 久久看片网站| 欧美日韩天天操| 欧美中文字幕久久| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲欧洲日产国码二区| 国产手机视频一区二区| 欧美日韩色一区| 久久久国产精品一区| 亚洲巨乳在线| 亚洲国产电影| 好看的日韩av电影| 免费日韩av片| 久久深夜福利免费观看| 欧美一区二区网站| 亚洲欧美日韩国产中文| 欧美成人性生活| 麻豆成人综合网| 久久精品亚洲乱码伦伦中文 | 一区二区av在线| 在线中文字幕一区| 国产日韩欧美在线看| 欧美伦理91| 99re6热只有精品免费观看 | 亚洲嫩草精品久久| 国产色视频一区| 欧美日本韩国一区二区三区| 免费视频亚洲| 欧美国产日本在线| 免费在线欧美黄色| 另类图片国产| 一本到12不卡视频在线dvd| 99精品视频免费全部在线| 99国产精品久久久久久久| 亚洲视频香蕉人妖| 亚洲电影第1页| 欧美岛国激情| 欧美国产精品人人做人人爱| 91久久久久久久久| 免费成人网www| 亚洲精品1234| 亚洲欧美亚洲| 欧美成人黑人xx视频免费观看| 亚洲自拍偷拍网址| 久久亚洲午夜电影| 欧美午夜片在线观看| 国产精品视频xxxx| 国产亚洲成年网址在线观看| 欧美日韩1区| 欧美婷婷在线| 国产欧美日韩另类视频免费观看| 国产精品拍天天在线| 国产亚洲制服色| 黄色亚洲大片免费在线观看| 亚洲国产精品欧美一二99| 亚洲最新中文字幕| 性色av香蕉一区二区| 久久久久久久欧美精品| 欧美成人免费小视频| 亚洲伦理一区| 欧美一区二区视频免费观看| 久久在线视频| 欧美成人首页| 国产老肥熟一区二区三区| 欧美电影在线播放| av不卡在线| 欧美亚洲一区二区在线| 亚洲欧美精品一区| 麻豆久久婷婷| 亚洲午夜视频在线| 久久免费视频在线观看| 欧美日本免费一区二区三区| 国产伦精品一区二区三区视频黑人| 国产一区二三区| 一本久久综合亚洲鲁鲁| 久久久综合网站| 久久高清国产| 亚洲欧美日韩综合aⅴ视频| 久久久精品国产一区二区三区| 欧美激情在线观看| 午夜久久黄色| 欧美激情中文字幕乱码免费| 国产性色一区二区| 亚洲一区二区少妇| 亚洲成人资源| 久久九九精品| 国产日韩欧美黄色| 亚洲一区二区在线免费观看| 蜜桃伊人久久| 小黄鸭精品密入口导航| 国产精品福利网站| 99这里有精品| 亚洲国产欧美在线人成| 久久久亚洲一区| 国产欧美欧洲在线观看| 亚洲午夜伦理| 亚洲国产va精品久久久不卡综合| 午夜免费在线观看精品视频| 一本色道久久综合亚洲二区三区 | 国产精品国产三级国产普通话蜜臀| 国产精品成人一区二区网站软件 | 日韩午夜中文字幕| 在线播放豆国产99亚洲| 国产精品mv在线观看| 久久9热精品视频| 日韩午夜av| 欧美jizz19hd性欧美| 国产在线精品自拍| 国产亚洲精品综合一区91| 欧美色综合天天久久综合精品| 亚洲激情视频| 免费看亚洲片| 久久野战av| 在线欧美视频| 免费看的黄色欧美网站| 国产一区再线| 午夜欧美大尺度福利影院在线看 | 亚洲精品免费看| 久久久久高清| 亚洲国产婷婷香蕉久久久久久99| 亚洲精选成人| 久久精精品视频| 激情综合网激情| 欧美国产亚洲另类动漫| 欧美国产日韩一区二区| 国产精品一区二区在线| 一区二区三区在线免费视频 | 久久精品国产2020观看福利| 精品成人国产在线观看男人呻吟| 欧美成人亚洲成人日韩成人| 蜜臀av国产精品久久久久| 亚洲精品一区二区在线| 一区二区三区欧美视频| 国产日本欧美一区二区三区| 久久综合九色| 欧美久久视频| 欧美在线观看你懂的| 亚洲成色777777女色窝| 最新亚洲电影| 国产精品欧美久久| 老司机午夜精品| 黄色精品一二区| 一本色道久久综合亚洲精品不| 国产日韩精品入口| 欧美va亚洲va国产综合| 麻豆成人在线| 一区二区久久久久久| 久久一本综合频道| 欧美日韩激情网| 亚洲国产精品第一区二区三区| 香蕉成人伊视频在线观看| 久久精品国产久精国产一老狼| 日韩午夜视频在线观看| 久久手机免费观看| 亚洲国产精品成人综合| 欧美三级欧美一级| 亚洲国产另类久久精品| 国产精品―色哟哟| 一区二区三区四区在线| 亚洲欧洲视频在线| 久久一区激情| 国产日韩欧美在线播放| 欧美高潮视频| 欧美激情第1页| 欧美精品v日韩精品v国产精品| 亚洲无限av看| 久久激情五月婷婷| 欧美电影美腿模特1979在线看| 亚洲精品黄网在线观看| 欧美日韩国产在线看| 欧美激情成人在线视频| 亚洲免费在线观看视频| 亚洲人成人一区二区三区| 国产精品video| 国产精品夜夜夜| 亚洲欧洲三级电影| 欧美成人一区二区三区在线观看| 亚洲第一视频网站| 亚洲国产精品第一区二区| 免费成人在线观看视频| 欧美成人tv| 99精品热视频只有精品10| 国产麻豆午夜三级精品| 欧美一区二区三区四区高清| 午夜视频在线观看一区二区三区| 国产精品久久久久999| 亚洲欧美激情一区| 久久久青草青青国产亚洲免观| 亚洲精品视频在线看| 欧美日韩中文另类| 午夜久久99| 亚洲福利视频网站| 久久久久成人网| 99在线视频精品| 国产日韩一级二级三级| 久久三级视频| 亚洲午夜激情网站| 欧美激情日韩| 久久不射电影网| 亚洲免费视频观看|