只是不明白这些typedef的意义

per*_*ill 1 c typedef

当试图在一些开源C项目的代码中发现某些东西时,我经常会看到这种typedef:

typedef struct _StructA StructA;
typedef struct _LinusTorvalds LinusTorvalds;
Run Code Online (Sandbox Code Playgroud)

为什么不直接定义和使用StructA,只需要StructA,而不是定义_ StructA然后"typedef"呢?
这种"_"技术有什么意义?

Tha*_*tos 7

在C中,结构必须用作:

struct _StructA my_variable;
Run Code Online (Sandbox Code Playgroud)

...即,您struct不仅要在定义时键入struct,还要在每次使用时键入.在typedef消除了打字struct,当你使用它(但不是当你定义是:有没有办法消除).随着typedef然后声明的一个实例struct变为:

StructA my_variable;
Run Code Online (Sandbox Code Playgroud)

现在,这并不能完全解释_StructA/ StructA业务中的定义struct/ typedef,你可以这样做:

typedef struct {
    ...
} StructA;
Run Code Online (Sandbox Code Playgroud)

...在这里,我们采取匿名struct并立即喂它typedef.但是使用这种方法,你不能使用struct内部本身,因为它(还)没有名称.为此,您需要以下内容:

typedef struct _Foo {
    int data;
    struct _Foo *next;
} Foo;
Run Code Online (Sandbox Code Playgroud)