在 typedef 声明中使用逗号?
Use of comma in a typedef declaration?
此声明 C99/C11 合规吗?
typedef struct element {
char *data;
struct element* next;
} element, *list, elements[5];
我找不到它在标准中工作的原因。
是的,它符合标准。 typedef
声明类似于普通声明,只是它们声明的标识符成为对象类型的类型别名,如果声明中没有 typedef
,则标识符将成为对象的类型。
所以虽然
int integer, *pointer_to_integer;
声明一个名为 integer
的 int
对象和一个名为 pointer_to_integer
的 int *
对象
typedef int integer, *pointer_to_integer;
将声明一个名为 integer
的 int
类型别名和一个名为 pointer_to_integer
.
的 int *
类型别名
从语法的角度来看,尽管不是功能上的,typedef
只是一个(假的)存储分类器(如 extern
、auto
、static
、register
或 _Thread_local
).
你的声明
typedef struct element {
char *data;
struct element* next;
} element, *list, elements[5];
稍微复杂一些,因为它还 定义了 struct element
数据类型,但它等同于:
struct element {
char *data;
struct element* next;
};
// <= definition of the `struct element` data type
// also OK if it comes after the typedefs
// (the `struct element` part of the typedef would then
// sort of forward-declare the struct )
/*the type aliases: */
typedef struct element
element, *list, elements[5];
-- 它将 element
声明为 struct element
的类型别名,将 list
声明为 struct element *
的类型别名,将 elements
声明为类型别名至 struct element [5]
.
在 C 语法中,typedef
关键字的作用类似于存储-class 说明符(如 extern
、static
),根据 C 2018 6.7.1,类型定义只是一个声明。像其他声明一样,它可能有一个 声明符列表 以逗号分隔 (6.7 1).
问题中的typedef
将element
定义为struct element
类型的别名,list
定义为指针类型的别名struct element
和 elements
作为 5 struct element
.
数组类型的别名
此声明 C99/C11 合规吗?
typedef struct element {
char *data;
struct element* next;
} element, *list, elements[5];
我找不到它在标准中工作的原因。
是的,它符合标准。 typedef
声明类似于普通声明,只是它们声明的标识符成为对象类型的类型别名,如果声明中没有 typedef
,则标识符将成为对象的类型。
所以虽然
int integer, *pointer_to_integer;
声明一个名为 integer
的 int
对象和一个名为 pointer_to_integer
int *
对象
typedef int integer, *pointer_to_integer;
将声明一个名为 integer
的 int
类型别名和一个名为 pointer_to_integer
.
int *
类型别名
从语法的角度来看,尽管不是功能上的,typedef
只是一个(假的)存储分类器(如 extern
、auto
、static
、register
或 _Thread_local
).
你的声明
typedef struct element {
char *data;
struct element* next;
} element, *list, elements[5];
稍微复杂一些,因为它还 定义了 struct element
数据类型,但它等同于:
struct element {
char *data;
struct element* next;
};
// <= definition of the `struct element` data type
// also OK if it comes after the typedefs
// (the `struct element` part of the typedef would then
// sort of forward-declare the struct )
/*the type aliases: */
typedef struct element
element, *list, elements[5];
-- 它将 element
声明为 struct element
的类型别名,将 list
声明为 struct element *
的类型别名,将 elements
声明为类型别名至 struct element [5]
.
在 C 语法中,typedef
关键字的作用类似于存储-class 说明符(如 extern
、static
),根据 C 2018 6.7.1,类型定义只是一个声明。像其他声明一样,它可能有一个 声明符列表 以逗号分隔 (6.7 1).
问题中的typedef
将element
定义为struct element
类型的别名,list
定义为指针类型的别名struct element
和 elements
作为 5 struct element
.