C語言中typedef的使用

2021-10-06 04:51:43 字數 2369 閱讀 1580

寫得不錯

typedef應該算是很熟悉的關鍵字了,但是我也只是簡單使用罷了,為了比較系統的講述這一小節,特地上網搜了一下。

好了,現在正式開始講解。

typedef關鍵字可以用於給資料型別定義乙個別名,比如說你本名叫關谷神奇,我嫌棄這個名字太長了,所以給你取乙個別名,叫關谷,以後我叫關谷的時候你就知道在叫你了。

當你定義了乙個結構體時,每次建立乙個結構體都要使用struct+結構體名的方式,而用了typedef之後,只要乙個結構體別名就可以建立了。

並且有了別名,本名我都可以不要了(當然你也可以加上)。

雖然說簡化寫法是乙個不錯的功能,但卻不是乙個很必要的功能。那麼肯定有別的好處才是。

我們知道c語言定義資料型別的時候只定義了它們之間的關係,但卻沒有具體定義它們的大小。比如 short 的長度只規定了不大於 int,long的長度不小於 int,int是多大也沒確定,所以你會看到51微控制器的int大小為兩個位元組,而在stm32中的長度為 4 位元組。所以這個時候有必要使用乙個別名來代替具體的資料型別,並且最好這個別名有一定的說明性,所以你會看到stm32庫函式有這麼一堆申明:

這樣一旦後期換了平台,我就知道怎麼根據新平台修改這個定義了,因為這個別名已經有長度、符號資訊了。

從51過來的讀者可能會說,幹嘛要用 typedef,使用 #define (關於#define可以檢視#define小節)也能有相同的效果。確實是,但是 #define 嚴格來說它只是用來替換的,而typedef 是專業的。所以使用 #define 可能一不小心就會給你挖坑了。

比如上面的,雖然本意是定義兩個指標的,但是 #define 比較笨,只會簡單替換,所以替換後成了這個樣子:

所以只有乙個被定義成了指標,而如果使用 typedef 就沒有這個問題。

並且可以多次使用typedef定義乙個別名,方便理解。

這個宣告還是比較難理解的,看起來像乙個函式,實際上,它是乙個陣列,這個陣列存放了3個函式指標,而這個函式返回值為long*,引數為int*、char*,這是因為fun首先和 結合,所以先是乙個陣列,然後才定義了陣列存放的資料型別。

如果使用多次定義的話就容易理解一些了:

這樣一來就簡化了資料型別的定義和宣告了。所以在看別人的**的時候你會發現很多這樣的宣告,這是因為確實很方便啊。

雖說typedef在取別名上是專業的,但是如果你不熟悉而貿然使用的話也可能會為你挖坑的。下面介紹使用typedef時的一些坑:

1、 const

在和const一起使用的時候,本想定義乙個指向的字元為常量的變數指標,但因為typedef的特殊性,不是簡單的替換,所以最終的定義的是指向的字元為變數的常量指標。

解決的辦法就是在typedef中加const即可:

這樣就沒有問題了。

看到這裡可能對以下寫法可能會模糊了:

怎麼看哪個可以變,哪個不可以變呢?

就看const修飾哪乙個了。如果說const離char近,就是字元不變,如果const離指標名比較近,那就是指標不變,其他類似的,好好理解一下就差不多了。如果實在不理解也沒關係,忘記了再回來查一下就行,但是你得知道使用typedef有這麼乙個坑在就行了。

2、 儲存類

typedef 不影響物件的儲存特性,但是在語法上它卻是乙個儲存類的關鍵字,就像 auto、extern、static、register等關鍵字一樣。所以不能和儲存類的關鍵字一起使用:

錯誤的原因就是不能宣告多個儲存類關鍵字,typedef 已經申明了儲存屬性,不允許再有第二個了。這個坑還是不容易跳進去的,畢竟編譯器能幫你找出問題來,不用你擔心。

C語言中的typedef

typedef是用於定義新的型別名,在程式設計中可以用typedef來定義新的型別名來代替已有的型別名 格式 typedef 已有型別名 新的型別名 通俗點說,就是為已有的型別取別名,例如 老鼠?又叫耗子?老鼠也是它,耗子也是他 但不能取新的型別名,也就是說不能憑空造出來乙個型別,必須是在已有的型別...

C語言中的typedef

typedef 的講解與應用例項 用法一 型別的重定義 typedef unsigned char u8 typedef char pchar 這裡的第一句是給unsigned char型別重新起個別名,叫 u8 應用時看到u8 定義的變數,就相當於unsigned char 型別,兩者是完全等價的...

C語言中typedef用法

c語言中typedef用法 1.基本解釋 typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料型別 int,char等 和自定義的資料型別 struct等 在程式設計中使用typedef目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些...