首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义结构和类型防御的正确位置

定义结构和类型防御的正确位置
EN

Stack Overflow用户
提问于 2016-06-05 21:10:11
回答 2查看 153关注 0票数 2

对问题的描述

我想知道在C中定义结构以供其他源文件使用的“正确方法”。请考虑以下结构

代码语言:javascript
复制
struct f3{
  double x;
  double y;
  double z;
};

问题

是否应该在头文件或源文件中声明类型防御和结构?如果在头文件中,为了遵守C软件工程技术,应该在该头文件中包含什么?

到目前为止我所做的:

我可以将它放在types.h中,然后在其他源文件(#include types.h)中使用struct f3,也可以将它放在源文件type.c中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-05 21:21:06

这取决于你想要与外界分享多少信息。

假设该结构在多个翻译单元之间共享,最直接的方法是将struct类型声明放入头文件中。它被称为完全结构声明。

代码语言:javascript
复制
struct f3{
  double x;
  double y;
  double z;
};

第二种方法是通过不完整的struct声明隐藏成员,有时被转发声明或不透明指针。这样,您就可以隐藏成员如何放置在内部的详细信息。

header.h

代码语言:javascript
复制
struct f3;

source.c

代码语言:javascript
复制
#include "header.h"

struct f3{
  double x;
  double y;
  double z;
};

此表单要求,来自公共接口的任何函数都必须只包含参数,这些参数是指向该结构的指针,并且它们只能通过指针返回该结构。换句话说,不能仅通过指针直接引用结构。例如:

代码语言:javascript
复制
double area(struct f3* point);
struct f3* makePoint(int x, int y, int z);
票数 4
EN

Stack Overflow用户

发布于 2016-06-05 21:18:08

如果您需要在多个源文件中使用该类型,请将其放入一个头(并让每个源文件包含它)。

如果一个类型是源文件的内部类型,那么将它放在源文件中(其他人不必知道它)。

C还提供了第三种方法(提供抽象类型),称为“不完全类型”。要做到这一点,您需要将struct f3 { ... };放在源文件中,struct f3;放在头文件中。这让其他文件知道类型存在,并且可以使用指向struct f3的指针,但它们不能看到struct f3的内部或访问其成员。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37646810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档