C - 隐藏结构的实现

inz*_*nez 2 c struct

我在不同的帖子中读到,通过执行以下操作可以将结构的实现隐藏在C中:

test.h:

typedef struct SomeTest *SomeTest;
SomeTest make();
Run Code Online (Sandbox Code Playgroud)

test.c的:

#include "test.h"
typedef struct SomeTest {
    int data;
}*SomeTest;
Run Code Online (Sandbox Code Playgroud)

我不知道的是:线路是:

typedef struct SomeTest *SomeTest;
Run Code Online (Sandbox Code Playgroud)

真的需要那种方式吗?是不是足够:

test.h:

   typedef struct SomeTest SomeTest;
   SomeTest *make();
Run Code Online (Sandbox Code Playgroud)

test.c的:

#include "test.h"
struct SomeTest {
    int data;
};
Run Code Online (Sandbox Code Playgroud)

就是这条线:

typedef struct SomeTest *SomeTest;
Run Code Online (Sandbox Code Playgroud)

有时令我头疼,......而且它隐藏了"SomeTest"是一个指针的事实......

Jen*_*edt 10

这只是编码风格的问题.很多人,包括我,当指针隐藏在一个后面时,真的很困惑typedef.添加少许*在每一次出现是不是一个真正的大问题,但有很大帮助澄清事情偶尔读者.

另一个方面typedef是非常糟糕的:不应该允许使用相同的标识符(struct标签和typedefed名称)不同类型(一个a struct和另一个指针),并且确实混淆.这真是糟糕,糟糕的风格,不应该通过任何代码审查.