typedef可以成為你的朋友

2022-05-14 12:50:16 字數 2308 閱讀 8305

typedef static char int8;這個宣告正確嗎?

所以上面那個宣告是錯誤的。

typedef為一種型別引入新的名字,而不是為變數分配空間,它並沒有引入新的型別,而是為現有的型別取個新名字。在說到typedef時,有乙個很好的例子是signal()函式宣告,但是,一般而言只有極少數情況才會使用到這樣的技巧,這裡就不再贅述,我們應該知道更多關於typedef對於大多數程式設計師應該知道的事。

說到typedef就不能不說一下它的缺點。它同樣具有與其他宣告一樣的混亂語法。可以把幾個宣告器塞到乙個宣告中去,例如:

typedef int *ptr,(*fun)(void),arr[5];
ptr是指向int的指標型別;

fun是指向返回值為int的引數為void的函式的指標型別;

arr是長度為5的int型陣列型別。

上面這樣的寫法應該盡量避免使用。

甚至typedef的位置不是必須放在宣告的開始部分,例如:

也不要把typedef嵌入到宣告的中間部分,如下所示:

unsigned  long typedef int

volatile *kumquat;

這樣的表示式會讓**變得不好閱讀!!!

我們使用typedef,是為了使**更易於閱讀,給已有型別取乙個我們喜歡的別名,不要濫用或者亂用它。

再來看看typedef和define的區別

最基本的區別:

#define mychar char*

mychar a,b;

typedef char * yourchar;

yourchar c,d;

define是純文字替換,如果用define定義的型別定義多個物件,那樣只有第乙個物件才是原本define的型別,在上面的例子中,b是char不是char*型別,但是c和d都是char *型別。

還有乙個區別:

typedef是一種徹底的「封裝」,在宣告它之後不能再往裡面增加別的東西,這和巨集不同。

知道這些之後,我們平時書寫**就應該遵循一些規範,把typedef放在宣告的開始,並且乙個型別用乙個typedef修飾,不要在typedef型別前後加其他宣告器。

c語言存在多種名字空間:

。標籤名

。標籤:這個名字空間用於所有的結構、列舉、聯合。

。成員名:每個結構或聯合都有自身的名字空間

。其他在同乙個名字空間裡,任何名字必須具有唯一性,但在不同的名字空間裡可以存在相同的名字。

由於在不同的名字空間使用同乙個名字是合法的,所以這樣的**是可以通過編譯的,但還是不建議這樣書寫。

struct foofoo;

typedef struct baz baz;

struct baz var1;

baz var2;

這些都是合法的。只有結構標籤能夠在以後的宣告中使用(注意了!)。可以用typedef定義乙個結構型別,這樣可以省略struc的書寫,也可以直接用struct 標籤 變數的方式,就算使用了typedef也一樣。

在使用typedef的時候,應該盡量避免混淆,做到思路清晰,**可讀性高。

再看一例:

#includetypedef 

char *test;

int main(void

)

前面說了,不要在使用了typedef的識別符號前後再加修飾(上面例子在typedef宣告的別名test前又加了乙個const修飾),那樣有可能和你想的不同。知道可能的坑,並善於利用typedef帶給我們的便利,typedef可以成為你的朋友。

誰是你的潛在朋友

總時間限制 1000ms 記憶體限制 65536kb 描述 臭味相投 這是我們描述朋友時喜歡用的詞彙。兩個人是朋友通常意味著他們存在著許多共同的興趣。然而作為乙個宅男,你發現自己與他人相互了解的機會並不太多。幸運的是,你意外得到了乙份北大圖書館的圖書借閱記錄,於是你挑燈熬夜地程式設計,想從中發現潛在...

朋友決定你的財富

幾年前,我參加了乙個主題為 創造財富 的論壇。在討論會上,乙個發言人在演說過程中向聽眾提出了乙個問題。他說 請大家拿出一頁紙,然後在紙上寫下和你相處時間最多的6個人,也可以說是與你關係最親密的6個朋友,記下他們每個人的月收入。然後,算出這6個人月收入的總和,最後算出他們月收入的平均數。這個平均值便能...

PKU 誰是你潛在的朋友

臭味相投 這是我們描述朋友時喜歡用的詞彙。兩個人是朋友通常意味著他們存在著許多共同的興趣。然而作為乙個宅男,你發現自己與他人相互了解的機會並不太多。幸運的是,你意外得到了乙份北大圖書館的圖書借閱記錄,於是你挑燈熬夜地程式設計,想從中發現潛在的朋友。首先你對借閱記錄進行了一番整理,把n個讀者依次編號為...