欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: #define 和 typedef 的區(qū)別 這兩個(gè)有什么區(qū)別 [打印本頁]

作者: hei51ck    時(shí)間: 2018-8-17 17:44
標(biāo)題: #define 和 typedef 的區(qū)別 這兩個(gè)有什么區(qū)別
首先謝謝老師們進(jìn)我的帖子,我想請(qǐng)教一下您們,我看別人的程序 有時(shí)候定義一個(gè)#define u16 unsigned int 有時(shí)候定義typedef unsigned int u16;
這兩個(gè)有什么區(qū)別。

作者: mengzhixinheng    時(shí)間: 2018-8-17 20:11
百度一下,完美解釋
作者: angmall    時(shí)間: 2018-8-18 08:16
1) #define是預(yù)處理指令,在編譯預(yù)處理時(shí)進(jìn)行簡單的替換,不作正確性檢查,不關(guā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)行簡單的替換,而typedef不是簡單替換 ,而是采用如同定義變量的方法那樣來聲明一種類型。也就是說;
//refer to (xzgyb(老達(dá)摩))
#define int_ptr int *
int_ptr a, b; //相當(dāng)于int * a, b; 只是簡單的宏替換
typedef int* int_ptr;
int_ptr a, b; //a, b 都為指向int的指針,typedef為int* 引入了一個(gè)新的助記符
這也說明了為什么下面觀點(diǎn)成立
//QunKangLi(維護(hù)成本與程序員的創(chuàng)造力的平方成正比)
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的內(nèi)容可更改
const PINT p ;//p可更改,但是p指向的內(nèi)容不可更改。
pint是一種指針類型 const pint p 就是把指針給鎖住了 p不可更改
而const PINT p 是const int * p 鎖的是指針p所指的對(duì)象。

4)也許您已經(jīng)注意到#define 不是語句 不要在行末加分號(hào),否則 會(huì)連分號(hào)一塊置換。

5) 可見,用define進(jìn)行類型替換時(shí),會(huì)產(chǎn)生各種意想不到的錯(cuò)誤,故應(yīng)避免使用,而改用安全的typedef



c語言typedef & define用法介紹(非常詳細(xì))
http://www.raoushi.com/bbs/dpj-41078-1.html
作者: hsjdw    時(shí)間: 2018-8-18 14:35
1) #define是預(yù)處理指令,在編譯預(yù)處理時(shí)進(jìn)行簡單的替換,不作正確性檢查,不關(guā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。
作者: hongyinac    時(shí)間: 2018-8-18 15:42
一個(gè)是替換,一個(gè)是給己經(jīng)存在的類型起個(gè)別名
作者: 還記得女警    時(shí)間: 2018-8-18 15:53
1) #define是預(yù)處理指令,在編譯預(yù)處理時(shí)進(jìn)行簡單的替換,不作正確性檢查,不關(guā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)行簡單的替換,而typedef不是簡單替換 ,而是采用如同定義變量的方法那樣來聲明一種類型。也就是說;
//refer to (xzgyb(老達(dá)摩))
#define int_ptr int *
int_ptr a, b; //相當(dāng)于int * a, b; 只是簡單的宏替換
typedef int* int_ptr;
int_ptr a, b; //a, b 都為指向int的指針,typedef為int* 引入了一個(gè)新的助記符
這也說明了為什么下面觀點(diǎn)成立
//QunKangLi(維護(hù)成本與程序員的創(chuàng)造力的平方成正比)
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的內(nèi)容可更改
const PINT p ;//p可更改,但是p指向的內(nèi)容不可更改。
pint是一種指針類型 const pint p 就是把指針給鎖住了 p不可更改
而const PINT p 是const int * p 鎖的是指針p所指的對(duì)象。

4)也許您已經(jīng)注意到#define 不是語句 不要在行末加分號(hào),否則 會(huì)連分號(hào)一塊置換。

5) 可見,用define進(jìn)行類型替換時(shí),會(huì)產(chǎn)生各種意想不到的錯(cuò)誤,故應(yīng)避免使用,而改用安全的typedef



c語言typedef & define用法介紹(非常詳細(xì))
http://www.raoushi.com/bbs/dpj-41078-1.html
作者: jts3592628461    時(shí)間: 2018-8-18 16:24
區(qū)別很大,忠告,最好別用#define來定義數(shù)據(jù)類型。它們的區(qū)別舉個(gè)例子你就懂了。
作者: jts3592628461    時(shí)間: 2018-8-18 16:24
區(qū)別很大的。。。。
作者: zhaoyinlo    時(shí)間: 2018-9-3 12:30
1) #define是預(yù)處理指令,在編譯預(yù)處理時(shí)進(jìn)行簡單的替換,不作正確性檢查,不關(guā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。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1