新四季網

c語言中typedef的用法(C語言之define與typedef有什麼區別)

2023-09-21 12:51:48 3

#define

define是預處理指令,在編譯時不進行任何檢查,只進行簡單的替換

宏定義的一般形式為:

#define 宏名 字符串

這裡所說的字符串是一般意義上的字符序列,不要和C語言中的字符串等同,它不需要雙引號。

typedef

typedef是在C語言中用來為複雜的聲明定義簡單的別名,它本身是一種存儲類的關鍵字,與auto、extern、mutable、static、register等關鍵字不能出現在同一個表達式中。

typedef取別名的一般形式為:

typedef 舊名字 新名字

define與typedef的區別

(1)#define之後不帶分號,typedef之後帶分號。

(2)#define可以使用其他類型說明符對宏類型名進行擴展,而 typedef 不能這樣做。如:

#define INT1 intunsigned INT1 n; //沒問題typedef int INT2;unsigned INT2 n; //有問題

INT1可以使用類型說明符unsigned進行擴展,而INT2不能使用unsigned進行擴展。

(3)在連續定義幾個變量的時候,typedef 能夠保證定義的所有變量均為同一類型,而 #define 則無法保證。如:

#define PINT1 int*;P_INT1 p1,p2; //即int *p1,p2;typedet int* PINT2;P_INT2 p1,p2; //p1、p2 類型相同

PINT1定義的p1與p2類型不同,即p1為指向整形的指針變量,p2為整形變量;PINT2定義的p1與p2類型相同,即都是指向 int 類型的指針。

下面看一個關於typedef的重要的問題。請看代碼:

#include typedef char *pStr;int main(void){ char; //第一行代碼 const char *p1=string; //第二行代碼 const pStr p2 = string; //第三行代碼 p1 ; //第四行代碼 p2 ; //第五行代碼 return 0;}

這段代碼編譯會報一個錯誤:error: increment of read-only variable 'p2',你知道問題出在哪嗎?

答案與解析:

是第五行代碼p2 出錯了。這個問題提醒我們:typedef和#define不同,它不是簡單的文本替換。上述代碼中const pStr p2並不等於const char * p2。const pStr p2和pStr const p2本質上沒有區別,都是對變量進行只讀限制,只不過此處變量p2的數據類型是我們自己定義的而不是系統固有類型而已。

因此,const pStr p2的含義是:限定數據類型為char * 的變量p2為只讀,即為char* const p2,表明p2是一個指向char類型的常指針,所以p2是不可修改的,因此p2 錯誤。

順便提一下關於const聲明的一些例子及其含義:

const int a; //①int const b; //②const int *c; //③ int * const d; //④ int const * e const; //⑤

①a是常數,不可改變;

②b是常數,不可改變;

③c是一個指向整型常數的指針,指針可以變,指針指向的內容不可以變;

④d是一個指向整型變量的常指針,指針不可以變,指針指向的內容可以變;

⑤e是一個指向整型常數的常指針,指針與指針指向的內容都不可變。

往期好文:

實用 | 分享幾個非常實用的開源項目

分享一個有趣的庫,讓你學習C語言不會覺得那麼枯燥

分享GitHub上一位老外的嵌入式C編碼規範(收藏細讀)

我整理了一個嵌入式資料庫,大家有什麼好資料分享?可以給我留言,我把它加進去,資源共享,一起來完善這個資料庫!

(資料庫連結:https://gitee.com/zhengnianli/EmbedSummary)

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了