这两个声明在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旨在创建别名:)