gpt4 book ai didi

c - 如何在 C 中链接多个实现文件

转载 作者:太空狗 更新时间:2023-10-29 16:57:55 26 4
gpt4 key购买 nike

我有一些 .c 文件,即实现文件说

  • 主程序
  • 空调
  • 公元前

任何文件中的函数都可以调用不同文件中的任何函数。我的问题是,我是否需要一个 .h,即 A 和 B 的每个实现的头文件,其中每个头文件都定义了 A 或 B 中的 ALL 函数。

此外,main.c 中会同时包含 A.hB.h #included 吗?

如果最后有人能说清楚,还有,我以后如何在终端中编译和运行多个文件。

谢谢。

最佳答案

标题内容

A.c 的 header A.h 应仅包含使用A.c 中定义的设施的外部代码所需的信息。它不应该声明静态函数;它不应该声明静态变量;它不应该声明内部类型(仅在 A.c 中使用的类型)。它应该确保文件可以只使用 #include "A.h",然后充分利用 A.c 发布的功能。它应该是自包含的、幂等的(这样你可以在没有任何编译错误的情况下包含它两次)并且最小化。您可以通过将 #include "A.h" 作为 A.c 中的第一个 #include 行来简单地检查 header 是否自包含;您可以通过两次包含它来检查它是否是幂等的(但最好作为单独的测试来完成)。如果它不编译,它就不是独立的。 B.hB.c 也是如此。

有关 header 和标准的详细信息,请参阅“Should I use #include in headers?” ',它引用了 NASA 编码标准,'Linking against a static library ',其中包含我用于测试自包含和幂等性的脚本 chkhdr

链接

注意main.o依赖于main.cA.hB.h,但是 main.c 本身不依赖于 header 。

编译时,可以使用:

gcc -o program main.c A.c B.c

如果您需要其他选项,请添加它们(大多数标志在开头;库在结尾,在源代码之后)。您还可以将每个文件分别编译为目标代码,然后将目标文件链接在一起:

gcc -c main.c
gcc -c A.c
gcc -c B.c
gcc -o program main.o A.o B.o

关于c - 如何在 C 中链接多个实现文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622409/

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