在许多typedef课程和示例中,我看到了许多不同的C用法。
下面是正确的方法(例如来自ISO/IEC C语言规范草案)
typedef struct tnode TNODE;
struct tnode {
int count;
TNODE *left, *right;
};
TNODE s, *sp;但是,我看到了很多代码,其模式如下:
typedef struct {
int a;
int b;
} ab_t;这个错误是出于某些原因,还是正确的,但它提供了这样定义的结构的有限功能?
发布于 2022-02-25 19:44:51
这样做的目的是:
typedef struct {
int a;
int b;
} ab_t;是定义一个匿名struct并给它别名ab_t。对于这种情况,没有问题,因为您可以始终使用别名。但是,如果其中一个成员是指向此类型的指针,则会出现问题。
例如,如果您尝试这样做:
typedef struct {
int count;
TNODE *left, *right;
} TNODE;这不起作用,因为TNODE类型在使用时还没有定义,而且您不能使用结构的标记(即struct关键字后面的名称),因为它没有一个。
发布于 2022-02-25 20:36:31
这两种类型胡枝子之间的区别
typedef struct tnode TNODE;
struct tnode {
int count;
TNODE *left, *right;
};
TNODE s, *sp;和
typedef struct {
int a;
int b;
} ab_t;。在第二种情况下,您声明了一个未命名的结构。这意味着在结构中,你不能引用它本身。例如,您不能编写fir示例。
typede struct {
int count;
TNODE *left, *right;
} TNODE;因为在此成员声明中使用的名称TNODE
TNODE *left, *right;还没有宣布。
但是,如果结构标签有如下所示的名称,则可以引用结构
struct tnode {
int count;
struct tnode *left, *right;
};因为名称struct tnode已经声明了。
另一个不同之处是,要声明指向结构的指针,不需要对结构有完整的定义。那就是你可以写
typedef struct tnode TNODE;
TNODE *sp;
struct tnode {
int count;
TNODE *left, *right;
};请注意,您还可以用以下方式编写ty胡枝子声明
struct tnode {
int count;
struct tnode *left, *right;
} typedef TNODE;https://stackoverflow.com/questions/71270954
复制相似问题