为什么在头文件中使用 typedef 而不仅仅是在 .c 中执行所有操作

v_h*_*ead 2 c

我的文件中有一段这样的代码.c

typedef struct stack {
    int maxsize;  
    int top;
    int* items;
} stack;
Run Code Online (Sandbox Code Playgroud)

我读过,当使用头文件时,最好使用这个:

.h

typedef struct stack stack;
Run Code Online (Sandbox Code Playgroud)

并做 .c

struct stack {
    int maxsize;
    int top;
    int* items;
};

Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么我们不能在头文件中只使用函数声明,而 typedef 的事情,我们都在 c 文件中完成?为什么上面将 typedef 和 struct 分离到不同的文件中?

Lun*_*din 6

目的是私有封装,这是程序设计过程中常用的最佳实践。您在此处描述的内容通常称为“不透明类型”,因为它使用前向声明的概念来阻止结构的用户了解或使用结构的内容。从头文件中看到的结构是“不完整类型”,调用者无法声明这种类型的对象,也无法访问其中的任何成员。

详情请查看如何在C中进行私有封装?