c语言 - 'typedef struct x { }' 和 'typedef struct { } X' 有什么区别?



这两个声明在C:中有什么区别

typedef struct square{
   //Some fields
};

typedef struct{  
           //Some fields
} square;

第一个声明:

typedef struct square {
    // Some fields
};

定义了一个名为CCD_ 1的类型。typedef关键字是多余的(感谢HolyBlackCat指出这一点)。它相当于:

struct square {
   //Some fields
};

(事实上,您可以在声明中使用typedef关键字而不定义类型名,这是C语法中的一个小故障。)

第一个声明可能应该是:

typedef struct square {
    // Some fields
} square;

第二项声明:

typedef struct {
    // Some fields
} square;

定义了一个匿名的CCD_ 4类型,然后给它一个别名CCD_。

请记住,typedef本身并没有定义新类型,只是为现有类型定义了一个新名称。在这种情况下,typedef和(匿名)struct定义恰好组合成一个声明。

struct X { /* ... */ };

创建一个新类型。所以你可以通过声明这种新类型

struct X myvar = {...}

struct X *myvar = malloc(sizeof *myvar);

typdef用于命名一种类型

typedef enum { false, true } boolean;
boolean b = true; /* Yeah, C ANSI doesn't provide false/true keyword */

所以在这里,您将enum重命名为boolean。

所以当你写的时候

typedef struct X {
    //some field
} X;

您将类型结构X重命名为X。当我说重命名时,它更多的是另一个名称。

小贴士,你可以简单地写:

typedef struct {
    //some field
} X;

但是,如果您需要一个具有相同类型的字段(如链表中),则必须为结构指定一个名称

typedef struct X {
    X *next; /* will not work */
    struct X *next; /* ok */
} X;

希望这有帮助:)

编辑:正如Keith Thompson所说,typdef旨在创建别名:)

最新更新