对问题的描述
我想知道在C中定义结构以供其他源文件使用的“正确方法”。请考虑以下结构
struct f3{
double x;
double y;
double z;
};问题
是否应该在头文件或源文件中声明类型防御和结构?如果在头文件中,为了遵守C软件工程技术,应该在该头文件中包含什么?
到目前为止我所做的:
我可以将它放在types.h中,然后在其他源文件(#include types.h)中使用struct f3,也可以将它放在源文件type.c中。
发布于 2016-06-05 21:21:06
这取决于你想要与外界分享多少信息。
假设该结构在多个翻译单元之间共享,最直接的方法是将struct类型声明放入头文件中。它被称为完全结构声明。
struct f3{
double x;
double y;
double z;
};第二种方法是通过不完整的struct声明隐藏成员,有时被转发声明或不透明指针。这样,您就可以隐藏成员如何放置在内部的详细信息。
header.h
struct f3;source.c
#include "header.h"
struct f3{
double x;
double y;
double z;
};此表单要求,来自公共接口的任何函数都必须只包含参数,这些参数是指向该结构的指针,并且它们只能通过指针返回该结构。换句话说,不能仅通过指针直接引用结构。例如:
double area(struct f3* point);
struct f3* makePoint(int x, int y, int z);发布于 2016-06-05 21:18:08
如果您需要在多个源文件中使用该类型,请将其放入一个头(并让每个源文件包含它)。
如果一个类型是源文件的内部类型,那么将它放在源文件中(其他人不必知道它)。
C还提供了第三种方法(提供抽象类型),称为“不完全类型”。要做到这一点,您需要将struct f3 { ... };放在源文件中,struct f3;放在头文件中。这让其他文件知道类型存在,并且可以使用指向struct f3的指针,但它们不能看到struct f3的内部或访问其成员。
https://stackoverflow.com/questions/37646810
复制相似问题