2014-09-28 74 views
1

在代碼中的許多地方,我已經看到了這樣的代碼:爲什麼結構類型被定義爲自己的名字?

typedef struct Name_of_Struct{ 
    //Things that the struct holds 
} Name_of_Struct; 

我似乎不明白爲什麼這樣的聲明?爲什麼結構typedef'被修改爲自己的名字?難道不是說typedef Name_of_struct Name_of_Struct;?我知道這樣的聲明背後必然有一些原因,因爲這樣的代碼實例在SDL等良好和高度使用的代碼庫中被看到。

+0

請注意,SDL是一個C庫,可以從C++中使用。 – Csq 2014-09-28 14:33:20

+0

首先,這是一個C特定的聲明模式。 C,而不是C++。你將問題標記爲[C++]。那麼,你有沒有在C++代碼中看到它(這在共享的C/C++代碼中是可行的)?或者你是否錯誤地提出了你的問題? – AnT 2014-09-28 14:36:19

+0

我不知道所有的代碼都是c。對不起。 – 2014-09-28 14:40:41

回答

4

在C++中你沒有這樣做,

但是用C這樣做是爲了節省一些打字

struct Name_of_Struct{ 
    //Things that the struct holds 
} ; 

struct Name_of_Struct ss; // If not typedef'ed you'll have to use `struct` 

但用typedef

typedef struct Name_of_Struct{ 
    //Things that the struct holds 
} Name_of_Struct; 

Name_of_Struct ss ; // Simply just use name of struct, avoid struct everywhere 
0

代碼可能在C和C++之間共享。 C編程語言不會自動爲用戶創建的類型創建類型名稱(例如,enum,structunion)。我近幾年沒有寫很多C語言,所以在C99中可能會有所變化。

+0

只是好奇最初的投票來自哪裏? – 2014-09-28 14:27:10

1

指定名義進行兩次是多餘的。

最初在C typedef被使用,所以你不需要一直限定名稱struct。在C++中,您可以簡單地命名爲struct

// C method 

struct MyStruct {}; 

// need to qualify that name with `struct` 

struct MyStruct s; 

// C method avoiding typing `struct` all the time 

typedef struct {} MyStruct; 

MyStruct s; // no need to use `struct` 

// C++ way 

struct MyStruct {}; 

MyStruct s; 

看來有些程序員已經做了兩種方法的科學怪人。

相關問題