`

typedef struct 和 typedef struct tagname 区别

阅读更多


在struct, union, 和 enum 的定义中tag name是可选项. 比如struct definition 使用typedef并忽略tag:

typedef struct
{
...
} T;


这样完全没有错误,但是如果使用self-referential structures包含了他自己的pointers. 例如:

struct list_node
{
...
struct list_node *next;
};



这样定义了个名为list_node的struct. 如果使用typedef 并不用 tag:

typedef struct
{
...
list_node *next; // error
} list_node;


compiler会报错,因为成员next参照list_node但这是list_node还没有声明. 所以要加上tag

typedef struct list_node
{
...
list_node *next; // error
} list_node_t;


这里先建立了list_node这个struct, 然后typedef它为新的名字list_node_t

ref:Tag vs. Type Names

分享到:
评论

相关推荐

    struct类型

    这样,我们就可以直接用 `StructName` 来声明结构体变量,而无需每次都写 `struct Tag`: ```c++ StructName myStruct; ``` 访问结构体中的成员通常使用点操作符 `.`,例如: ```c myStruct.成员1 = 10; myStruct...

    C/C++ 结构体与共用体教程

    typedef struct tagname NewTypeName; NewTypeName var; ``` 这样,`NewTypeName` 就可以替代 `struct tagname` 来声明变量。 总结,结构体与共用体是 C/C++ 中强大的数据组织工具,它们能够帮助我们构建复杂的数据...

    结构体基本知识

    typedef struct tagname newtypename; ``` 这样,我们就可以使用 `newtypename` 代替 `struct tagname`。 通过这些基本概念和操作,开发者可以在C语言中构建复杂的数据结构,以满足各种编程需求。掌握结构体、共用...

    C语言全书word版CHAR11

    typedef struct tagname newTypeName; ``` 这样,`newTypeName`就可以作为结构体的别名使用。 总结来说,这一章详细讲解了C语言中结构体与共用体的基本概念、使用方法以及相关操作,包括定义、初始化、赋值、指针...

    操作系统CZXT1.CPP

    设RQ分为RQ1和RQ2,RQ1采用轮转法,时间... typedef struct tag_pcb { char name[8]; int need;//须运行的时间 int turn;//周转时间 struct tag_pcb *next; } PCB; PCB * RQ1,*RQ2,*Finish; int clock=0; //时钟

    c++运行程序缺少mex.h

    typedef struct mexGlobalTableEntry_Tag { const char* name; // 全局变量名 mxArray** variable; // 变量指针 } mexGlobalTableEntry, *mexGlobalTable; typedef struct mexFunctionTableEntry_tag { ...

    结构体C语言高级进阶篇PPT课件.pptx

    在这个例子中,`student_tag`是结构体类型的名字,`ID`、`name`、`gender`、`age`、`phone`和`addr`是成员变量。 2. 使用`typedef`关键字定义新的结构体类型,例如: ```c typedef struct { // 同上 } student_T; ...

    C语言语法大全-结构体

    struct tag { member-type member-name; member-type member-name; ... } variable-name; ``` 2. **结构体变量**: 结构体定义完成后,可以通过结构体标签来创建结构体变量。例如,定义`Books`结构体并创建...

    C语言程序设计课件第12章结构体和共用体.ppt

    在C语言中,结构体(Struct)和共用体(Union)是两种非常重要的复合数据类型,它们允许程序员自定义复杂的数据结构来存储和处理不同类型的数据。本章内容主要涉及结构体和共用体的基本概念、定义、初始化、成员访问...

    关于结构体的认识

    通过上述分析,我们不仅了解了结构体的基础知识,还掌握了如何利用结构体来构建复杂的数据结构如链表,并且学会了如何使用`typedef`来简化结构体的声明和使用,进一步提高了代码的可读性和可维护性。

    结构体C语言高级进阶篇PPT学习教案.pptx

    在C语言中,结构体(Struct)是一种复合数据类型,它允许我们将多种不同类型的变量组合在一起,形成一个新的类型,便于管理和处理复杂的数据结构。这在实现如学校学生信息数据库等实际应用中尤其重要。在清华大学的...

    简单的XML解释器纯C语言写的

    typedef struct { char* name; char** attributes; int attribute_count; struct Node* children; struct Node* parent; } XmlNode; // 解析XML文件并返回根节点 XmlNode* parse_xml(const char* filename); /...

    ttf格式详解

    typedef struct { char tag[4]; // 表格的标识符,通常是4个大写字母 ULONG checkSum; // 表格数据的校验和 ULONG offset; // 表格数据在文件中的偏移量 ULONG length; // 表格数据的长度 } TableEntry; ...

    c代码-9.结构体

    typedef struct tag_name alias_name; alias_name var_name; ``` `main.c`可能包含了一些结构体使用的实例,如定义一个学生信息结构体,包含姓名、年龄和成绩等字段,然后创建并初始化结构体变量,进行读写操作: ...

    【博客大赛】《C和指针》摘抄整理型笔记四

    typedef struct SELF_REF3_TAG{ int a; struct SELF_REF3_TAG *b; // 正确:现在SELF_REF3_TAG已定义 int c; } SELF_REF3; ``` 通过这种方式,我们可以成功地创建一个包含自身类型的结构体,并避免了编译错误。...

    C_C++变量命名规则

    typedef structtag TSTUDENT{ int nId; CStringstrName; }STUDENT,*PSTUDENT; STUDENT tXiaoZhang;//完整定义结构体 七、变量由多个单词组成,则每个单词的首个字母大写。 int nStudentID; CStringstrStudentName;...

    第10章 结构体和共用体-7枚举类型1

    这里的`tag_name`是枚举类型的标识符,而`constant1`到`constantN`则是枚举常量,它们默认是从0开始按顺序递增的整数值。例如: ```c enum weeks {SUN, MON, TUE, WED, THU, FRI, SAT}; ``` 在这个例子中,`SUN`...

    FreeRTOS学习记录--任务创建函数详解.doc

    typedef struct tskTaskControlBlock { volatile StackType_t *pxTopOfStack; /* 任务堆栈栈顶指针 */ #if ( portUSING_MPU_WRAPPERS == 1 ) xMPU_SETTINGS xMPUSettings; /* MPU 相关设置 */ #endif ListItem_...

    stdafx.h代码

    // embeddable BeginPaint struct helper class CMenu; // a menu / HMENU wrapper class CCmdTarget; // a target for user commands class CWnd; // a window / HWND wrapper class CDialog; // a dialog...

Global site tag (gtag.js) - Google Analytics