如何将 typedef 结构与实例创建结合起来?
How to combine typedef'd struct with instance creation?
所以你可以这样做来创建 c1
和 c2
作为 struct Complex
:
的实例
struct Complex {
int real;
int imag;
} c1, c2;
你可以这样做来定义匿名结构:
typedef struct { ... } Complex;
但是有什么方法可以同时完成这两个操作吗?
不,你不能。 typedef
的语法是
typedef T type_ident; // T is type specified by the declaration specifiers
这意味着 typedef T
之后的任何内容都将是类型名称,而不是该类型的实例。所以,在
typedef struct { ... } Complex, c1, c2;
Complex
、c1
和 c2
都是类型为 struct { ... }
.
的 typedef 名称
standard (PDF) 说这是不可能的,因为 typedef
只是类型说明符之一。就好像你写了 char int a;
.
Storage-class 说明符(typedef
、static
、extern
等)始终适用于整个声明。同一个声明不能声明静态和非静态变量一样,一个typedef
声明只能定义类型定义:
static int foo, bar; // Both foo and bar are static
typedef int c1, c2; // Both c1 and c2 are typedefs
第一种形式声明结构标签;第二个声明了一个 typedef。主要区别在于第二个声明是稍微抽象的类型,如果用户不一定知道它是一个结构体,并且在声明它的实例时不使用关键字struct ...& 用标签声明的结构体,另一方面,必须定义..所以不可能将 c1 和 c2 创建为 struct Complex 的实例....
所以你可以这样做来创建 c1
和 c2
作为 struct Complex
:
struct Complex {
int real;
int imag;
} c1, c2;
你可以这样做来定义匿名结构:
typedef struct { ... } Complex;
但是有什么方法可以同时完成这两个操作吗?
不,你不能。 typedef
的语法是
typedef T type_ident; // T is type specified by the declaration specifiers
这意味着 typedef T
之后的任何内容都将是类型名称,而不是该类型的实例。所以,在
typedef struct { ... } Complex, c1, c2;
Complex
、c1
和 c2
都是类型为 struct { ... }
.
standard (PDF) 说这是不可能的,因为 typedef
只是类型说明符之一。就好像你写了 char int a;
.
Storage-class 说明符(typedef
、static
、extern
等)始终适用于整个声明。同一个声明不能声明静态和非静态变量一样,一个typedef
声明只能定义类型定义:
static int foo, bar; // Both foo and bar are static
typedef int c1, c2; // Both c1 and c2 are typedefs
第一种形式声明结构标签;第二个声明了一个 typedef。主要区别在于第二个声明是稍微抽象的类型,如果用户不一定知道它是一个结构体,并且在声明它的实例时不使用关键字struct ...& 用标签声明的结构体,另一方面,必须定义..所以不可能将 c1 和 c2 创建为 struct Complex 的实例....