久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2483|回復: 8
打印 上一主題 下一主題
收起左側

#define 和 typedef 的區別 這兩個有什么區別

[復制鏈接]
跳轉到指定樓層
樓主
ID:356113 發表于 2018-8-17 17:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
首先謝謝老師們進我的帖子,我想請教一下您們,我看別人的程序 有時候定義一個#define u16 unsigned int 有時候定義typedef unsigned int u16;
這兩個有什么區別。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:89515 發表于 2018-8-17 20:11 | 只看該作者
百度一下,完美解釋
回復

使用道具 舉報

板凳
ID:155507 發表于 2018-8-18 08:16 | 只看該作者
1) #define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程序時才會發現可能的錯誤并報錯。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 會替換為3.1415926*r*r
如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。

2)typedef是在編譯時處理的。它在自己的作用域內給一個已經存在的類型一個別名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說 ,#define在預處理 時進行簡單的替換,而typedef不是簡單替換 ,而是采用如同定義變量的方法那樣來聲明一種類型。也就是說;
//refer to (xzgyb(老達摩))
#define int_ptr int *
int_ptr a, b; //相當于int * a, b; 只是簡單的宏替換
typedef int* int_ptr;
int_ptr a, b; //a, b 都為指向int的指針,typedef為int* 引入了一個新的助記符
這也說明了為什么下面觀點成立
//QunKangLi(維護成本與程序員的創造力的平方成正比)
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的內容可更改
const PINT p ;//p可更改,但是p指向的內容不可更改。
pint是一種指針類型 const pint p 就是把指針給鎖住了 p不可更改
而const PINT p 是const int * p 鎖的是指針p所指的對象。

4)也許您已經注意到#define 不是語句 不要在行末加分號,否則 會連分號一塊置換。

5) 可見,用define進行類型替換時,會產生各種意想不到的錯誤,故應避免使用,而改用安全的typedef



c語言typedef & define用法介紹(非常詳細)
http://www.zg4o1577.cn/bbs/dpj-41078-1.html
回復

使用道具 舉報

地板
ID:139917 發表于 2018-8-18 14:35 | 只看該作者
1) #define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程序時才會發現可能的錯誤并報錯。例如: #define PI 3.1415926 程序中的:area=PI*r*r 會替換為3.1415926*r*r 如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。  2)typedef是在編譯時處理的。它在自己的作用域內給一個已經存在的類型一個別名,但是You cannot use the typedef specifier inside a function definition。
回復

使用道具 舉報

5#
ID:387600 發表于 2018-8-18 15:42 | 只看該作者
一個是替換,一個是給己經存在的類型起個別名
回復

使用道具 舉報

6#
ID:387608 發表于 2018-8-18 15:53 | 只看該作者
1) #define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程序時才會發現可能的錯誤并報錯。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 會替換為3.1415926*r*r
如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。

2)typedef是在編譯時處理的。它在自己的作用域內給一個已經存在的類型一個別名,但是You cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說 ,#define在預處理 時進行簡單的替換,而typedef不是簡單替換 ,而是采用如同定義變量的方法那樣來聲明一種類型。也就是說;
//refer to (xzgyb(老達摩))
#define int_ptr int *
int_ptr a, b; //相當于int * a, b; 只是簡單的宏替換
typedef int* int_ptr;
int_ptr a, b; //a, b 都為指向int的指針,typedef為int* 引入了一個新的助記符
這也說明了為什么下面觀點成立
//QunKangLi(維護成本與程序員的創造力的平方成正比)
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的內容可更改
const PINT p ;//p可更改,但是p指向的內容不可更改。
pint是一種指針類型 const pint p 就是把指針給鎖住了 p不可更改
而const PINT p 是const int * p 鎖的是指針p所指的對象。

4)也許您已經注意到#define 不是語句 不要在行末加分號,否則 會連分號一塊置換。

5) 可見,用define進行類型替換時,會產生各種意想不到的錯誤,故應避免使用,而改用安全的typedef



c語言typedef & define用法介紹(非常詳細)
http://www.zg4o1577.cn/bbs/dpj-41078-1.html
回復

使用道具 舉報

7#
ID:387621 發表于 2018-8-18 16:24 | 只看該作者
區別很大,忠告,最好別用#define來定義數據類型。它們的區別舉個例子你就懂了。
回復

使用道具 舉報

8#
ID:387621 發表于 2018-8-18 16:24 | 只看該作者
區別很大的。。。。
回復

使用道具 舉報

9#
ID:390775 發表于 2018-9-3 12:30 | 只看該作者
1) #define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程序時才會發現可能的錯誤并報錯。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 會替換為3.1415926*r*r
如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。
2)typedef是在編譯時處理的。它在自己的作用域內給一個已經存在的類型一個別名,但是You cannot use the typedef specifier inside a function definition。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久er99热精品一区二区 | 精品亚洲永久免费精品 | 男人天堂网址 | 欧美日日日日bbbbb视频 | 黄色片免费在线观看 | 国产精品国产成人国产三级 | 久草资源在线视频 | www.久久精品视频 | 欧美精品久久 | 日韩在线观看一区二区三区 | 欧美一级淫片免费视频黄 | 欧美日韩国产高清 | 国产精品无码永久免费888 | 97精品超碰一区二区三区 | 精品久久久久久中文字幕 | 久久久久久久久久久丰满 | 成人自拍av| 中文字幕在线观看视频一区 | 中文字幕av在线播放 | 国产精品黄色 | 四虎影视一区二区 | 国产精品美女久久久av超清 | japan21xxxxhd美女| 国产黄色大片网站 | 色狠狠一区 | 搞黄网站在线观看 | 日本成人片在线观看 | 国产欧美一区二区三区免费 | 美女天堂 | 亚洲国产精品一区在线观看 | 国产激情视频在线观看 | 国产日韩欧美精品一区二区三区 | 国产成人福利视频在线观看 | 亚洲精品中文字幕在线观看 | julia中文字幕久久一区二区 | 国产成人精品免费 | 日韩一区二区三区精品 | 1级毛片| 成人精品视频在线 | 亚洲精品v | 欧美性猛交一区二区三区精品 |