C 和 C++ 中 struct 和 typedef struct 的區別

C 和 C++ 中 struct 和 typedef struct 的區別

轉貼自「計算機科學論壇


typedef struct {
   int data;
   int text;
} S1;
 
// 這種方法可以在c或者c++中定義一個S1結構
struct S2 {
   int data;
   int text;
};
 
// 這種定義方式只能在C++中使用,而如果用在C中,那麼編譯器會報錯
struct {
   int data;
   int text;
} S3;
 
//這種方法並沒有定義一個結構,而是定義了一個s3的結構變量,編譯器會為s3內存。
void main()
{
   S1 mine1; // OK , S1 是一個類型
   S2 mine2; // OK, S2 是一個類型
   S3 mine3; // OK, S3 不是一個類型
   S1.data = 5; // ERROR S1 是一個類型
   S2.data = 5; // ERROR S2 是一個類型
   S3.data = 5; // OK S3是一個變量
}
 
// 另外,對與在結構中定義結構本身的變量也有幾種寫法
struct S6 {
   S6* ptr;
};
 
// 這種寫法只能在C++中使用
typedef struct {
   S7* ptr;
} S7;
 
// 這是一種在C和C++中都是錯誤的定義
//如果在C中,我們可以使用這樣
 
typedef struct tagS8{
   tagS8 * ptr;
} S8;

 

Dotblogs 的標籤: