C - 隐藏结构的实现

标签 c struct

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

测试.h:

typedef struct SomeTest *SomeTest;
SomeTest make();

测试.c:

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

不过我想知道的是: 是行:

typedef struct SomeTest *SomeTest;

真的需要那样吗?是否足以:

测试.h:

   typedef struct SomeTest SomeTest;
   SomeTest *make();

测试.c:

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

就是那一行:

typedef struct SomeTest *SomeTest;

有时让我头疼,...它隐藏了“SomeTest”是一个指针的事实...

最佳答案

这只是编码风格的问题。当指针隐藏在 typedef 后面时,包括我在内的很多人都感到很困惑。在每次出现时添加小的 * 并不是什么大问题,但对于偶尔阅读的人来说,有助于澄清事情。

typedef 的另一个方面真的很糟糕:对事物使用相同的标识符(struct 标记和 typedefed 名称)不同类型的(一个是 struct ,另一个是指针)不应该被允许并且真的很困惑。这真的很糟糕,很糟糕的风格,永远不应该通过任何代码审查。

关于C - 隐藏结构的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38587636/

相关文章:

c - 将 .csv 文件插入链表

struct - Go Programming - 如何在 ExecuteTemplate 中传递两个结构

c - fork() 内的 fork() 内的 while 循环

c - 将 Struct 设置为返回相同结构的函数

c - 无符号字符循环

ios - 如何从 .c 文件向 swift 类发送通知或委托(delegate)回调?

go - 从嵌入式结构遍历结构值

c - *char 到 main 和 *char 到 struct

c - 为什么 1/10 等于零,除非我使用变量?

c - 在特定时间后从 main 终止所有进程