如何将 typedef 结构与实例创建结合起来?

How to combine typedef'd struct with instance creation?

所以你可以这样做来创建 c1c2 作为 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;   

Complexc1c2 都是类型为 struct { ... }.

的 typedef 名称

standard (PDF) 说这是不可能的,因为 typedef 只是类型说明符之一。就好像你写了 char int a;.

Storage-class 说明符(typedefstaticextern 等)始终适用于整个声明。同一个声明不能声明静态和非静态变量一样,一个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 的实例....