C - 隐藏结构的实现

时间:2016-07-26 10:40:22

标签: c struct

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

test.h:

typedef struct SomeTest *SomeTest;
SomeTest make();

test.c的:

#include "test.h"
typedef struct SomeTest {
    int data;
}*SomeTest;

我不知道: 是行:

typedef struct SomeTest *SomeTest;

真的需要这种方式吗?这不足以:

test.h:

   typedef struct SomeTest SomeTest;
   SomeTest *make();

test.c的:

#include "test.h"
struct SomeTest {
    int data;
};

只是这一行:

typedef struct SomeTest *SomeTest;

有时会让我头疼,......而且它隐藏了“SomeTest”是一个指针...

1 个答案:

答案 0 :(得分:10)

这只是编码风格的问题。当指针隐藏在typedef后面时,包括我在内的许多人都会感到困惑。在每次出现时添加小*并不是什么大不了的事,但是为偶尔的读者提供了很多帮助。

typedef的另一个方面非常糟糕:对于不同类型的事物(struct标记和typedef ed名称)使用相同的标识符(一个{ {1}}和另一个指针)不应该被允许并且真的混淆。这真是糟糕,糟糕的风格,不应该通过任何代码审查。