gpt4 book ai didi

c - C文件的组织

转载 作者:太空狗 更新时间:2023-10-29 16:23:17 25 4
gpt4 key购买 nike

我习惯于在一个 C 文件中完成所有编码。但是,我正在从事一个足够大的项目,以至于这样做变得不切实际。我一直将它们#including在一起,但我遇到过多次#including某些文件的情况,等等。我听说过.h文件,但我不确定它们的功能是什么(或者为什么有 2 个文件总比 1 个好)。

我应该使用什么策略来组织我的代码?是否可以将特定文件的“公共(public)”功能与“私有(private)”功能分开?

This问题促成了我的询问。 tea.h 文件没有引用 tea.c 文件。编译器是否“知道”每个 .h 文件都有对应的 .c 文件?

最佳答案

您应该将.h 文件视为.c 文件的接口(interface)文件。每个 .c 文件代表一个具有一定功能的模块。如果 .c 文件中的函数被其他模块(即其他 .c 文件)使用,则将函数原型(prototype)放在 .h 接口(interface)文件中。通过将接口(interface)文件包含在原始模块 .c 文件和您需要该函数的所有其他 .c 文件中,您可以使该函数可用于其他模块。

如果您只需要某个 .c 文件中的函数(而不是任何其他模块中的函数),请将其作用域声明为静态的。这意味着它只能从定义它的 c 文件中调用。

跨多个模块使用的变量也是如此。它们应该放在头文件中,并且必须在那里用关键字“extern”进行标记。注意:对于函数,关键字“extern”是可选的。函数始终被视为“外部”。

头文件中的包含保护有助于避免多次包含相同的头文件。

例如:

模块 1.c:

    #include "Module1.h"    static void MyLocalFunction(void);    static unsigned int MyLocalVariable;        unsigned int MyExternVariable;    void MyExternFunction(void)    {        MyLocalVariable = 1u;               /* Do something */        MyLocalFunction();    }    static void MyLocalFunction(void)    {      /* Do something */      MyExternVariable = 2u;    }

模块 1.h:

    #ifndef __MODULE1.H    #define __MODULE1.H    extern unsigned int MyExternVariable;    void MyExternFunction(void);          #endif

模块2.c

    #include "Module.1.h"    static void MyLocalFunction(void);    static void MyLocalFunction(void)    {      MyExternVariable = 1u;      MyExternFunction();    }

关于c - C文件的组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com