当试图在一些开源C项目的代码中发现某些东西时,我经常会看到这种typedef:
typedef struct _StructA StructA;
typedef struct _LinusTorvalds LinusTorvalds;
Run Code Online (Sandbox Code Playgroud)
为什么不直接定义和使用StructA,只需要StructA,而不是定义_ StructA然后"typedef"呢?
这种"_"技术有什么意义?
在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)
| 归档时间: |
|
| 查看次数: |
349 次 |
| 最近记录: |