繁体   English   中英

当在另一个文件中声明struct时,如何使用struct作为函数的参数?

[英]How to use struct as argument of a function when the struct is declared in another file?

我正在编写一个ac项目,并试图将所有结构声明保留在相关的.h文件中。 通过包含相关的标头,这使我可以在任何.c文件中使用它们。 我还避免将我项目的头文件包含在其他头文件中。 我想这将使代码更易于阅读和维护。

我的问题是如何避免在使用该结构的头文件中包含包含结构声明的标头。 有什么办法吗? (我没有找到答案,对不起,如果重复)。 这是一个片段:

命令

#include "cmd.h"
#include "params.h"     //This allows usage of struct testPars

void move_parameters(struct testPars *testP) {
...
}

命令

#ifndef CMD_H
#define CMD_H
#include "params.h"     //I want to avoid this include in this file

void move_parameters(struct testPars *testP) ;
#endif

params.h

#ifndef PARAMS_H
#define PARAMS_H

struct testPars {
    char    name[16];
    double  value;
};
#endif

总的来说,这里关于正确的程序设计有很多困惑。

我正在尝试将所有结构声明保留在相关的.h文件中。 通过包含相关的标头,这使我可以在任何.c文件中使用它们。

对于没有私有封装或结构简单的快速而肮脏的编程,这是可接受的做法。

但是对于结构表示更复杂的ADT等的专业程序,您应仅在头文件中保留前向声明,并在相应的c文件中定义结构。 这导致私有封装和模块化,即良好的程序设计。 (搜索“不透明类型”或“不透明指针”的示例。此类前向声明​​的正式术语是不完整类型 。)

您尝试做的事情听起来像上面的一样,但完全倒退了:向调用者公开定义,但不要自己使用它。 显然,您不能使用尚未包含并在程序中可见的结构,因为这没有任何意义。

我还避免将我项目的头文件包含在其他头文件中。 我想这将使代码更易于阅读和维护。

这是一个坏主意。 您的每个头文件都应被视为有关c文件做什么以及如何使用的公共文档。 虽然c文件可以看作是私有数据,但其内容并不是调用者应该关注的任何内容。

该头文件文档的重要部分是列出该模块具有的所有依赖关系,以便其他程序员可以快速浏览一下头文件的顶部,并立即知道编译该特定模块所需的文件。

好的程序设计会争取尽可能少的依赖关系:“松耦合”。 因此,所有#includes都被视为重要信息,应放在头文件的顶部。 不应包含未使用的头文件。

c文件除了其自己的头文件外,不应包含任何包含。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM