我在不同的帖子中读到,通过执行以下操作可以将结构的实现隐藏在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”是一个指针...
答案 0 :(得分:10)
这只是编码风格的问题。当指针隐藏在typedef
后面时,包括我在内的许多人都会感到困惑。在每次出现时添加小*
并不是什么大不了的事,但是为偶尔的读者提供了很多帮助。
typedef
的另一个方面非常糟糕:对于不同类型的事物(struct
标记和typedef
ed名称)使用相同的标识符(一个{ {1}}和另一个指针)不应该被允许并且真的混淆。这真是糟糕,糟糕的风格,不应该通过任何代码审查。