gpt4 book ai didi

c - 我是否必须包含包含函数定义的 C 文件?

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:11 25 4
gpt4 key购买 nike

所以我一直在做一些阅读,我是否仍然在使用 C 中的 extern 关键字时遇到问题。

例如:我有一个名为:main.c 的文件,我在其中声明了一个函数 int add(int a, int b);(在使用之前)。但是,该函数的定义位于 math.c 中。这是否意味着我必须在 main.c (#include math.c/h) 或 main.h 文件中包含 math.c 和/或 math.h 文件才能使用该函数而不会导致编译时错误?或者仅仅声明函数 int add(int a, int b) 就足够了吗?

简而言之:我必须包含定义函数声明的文件吗?

此外,如果仅仅声明函数就足够了,这是好的做法,还是链接器会处理它?<​​/p>

谢谢。

最佳答案

您应该在“main.c”中包含“math.h”,并将add 的定义放在“math.h”中:int add(int a, int b);

然后还在“math.c”中包含“math.h”,并通过创建执行计算的代码在该文件中实际声明 add

然后,编译器将两个 .c 文件独立编译为 Linux/MacOS 下的 .o 文件,或 Windows 下的 .obj 文件。然后链接器获取这两个 .o/.obj 文件并将它们链接在一起以生成完整的可执行文件。

作为一般规则,具有 .h 扩展名的头文件旨在包含在多个 .c 文件中,并提供有关可在对应的.c文件。所以 math.h 包含所谓的 add 原型(prototype),这允许 main.c 知道该函数,因此它能够使用它正确,math.c 包含实际代码。

虽然不是绝对需要,但从长远来看,遵守此约定将使您更容易,尤其是当您有包含许多 .c.h 的大型项目时文件。这就是为什么您会发现几乎在您下载的所有开源项目中都使用了它。

-- 编辑--

此外,作为一般规则,不要直接在 .c 文件中包含外部定义。始终尝试将它们放在 .h 头文件中。如果您的项目中有 100 个或更多 .c 文件,并且您决定需要更改函数的原型(prototype),则将它们直接放在 .c 文件中会造成维护噩梦.您现在必须编辑无数个单独的 .c 文件,而不是编辑单个 .h .c 对。这将非常容易出错。

关于c - 我是否必须包含包含函数定义的 C 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51529461/

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