差異

2014-02-22 151 views
4

是什麼差異

typedef struct complex { 
    int x; 
    int y; 
}; 

typedef struct complex { 
    int x; 
    int y; 
} comp; 

是什麼在第二種情況下,額外comp做有什麼區別? 我曾嘗試在第一種情況下定義一個complex類型的新變量,並在第二種情況下使用comp,兩者都產生了相同的結果...請幫助!

回答

4

第一個typedef沒用,編譯可能會給你一個警告。

在第二個typedef之後,無論何時使用struct complex作爲類型,您都可以使用comp代替。可以修改第二代碼到該等效形式:

struct complex { 
    int x; 
    int y; 
}; 
typedef struct complex comp; 

可以看到,struct complex限定類型,而typedef給它的替代名稱。

0
struct complex { 
    int x; 
    int y; 
} comp; 

這是創建複雜類型變量的簡寫。在之前存在的comp是 ;因此它被視爲類型complex.look的變量AR下面的代碼也

struct { 
    int x; 
    int y; 
} comp; 

您也可以與創建它的結構類型的變量老編譯器做到這一點。

+0

請注意'變量名'在typedef下有不同的含義,並且這不是您所描述的情況。 – user3125367

1

typedef的目的是爲由一個或多個類型組件構成的類型聲明指定一個簡單的名稱。

在第一個聲明中,不要爲名爲complex的結構指定任何名稱。因此,編譯器會生成一個警告:使用的typedef與結構[或工會]當

i.e. warning: declaration does not declare anything 

通常,優選的是(以下詳細)使用未命名的結構,如下所示:

typedef struct {int x; int y;} complex; 
0

長話短說:

struct complex { 
    int x; 
    int y; 
}; 
// forces you to use : 
struct complex c; 

但是:

typedef struct complex { 
    int x; 
    int y; 
} comp; 
// allows you to use : 
comp c; 

Typedefs只是一個可讀性的問題