头文件如何关联源文件

头文件如何来关联源文件?

这个问题实际上是说:

  • 已知头文件"a.h"声明了一系列函数(仅有函数原型,没有函数实现)
  • "b.cpp"中实现了这些函数
  • 那么如果我想在"c.cpp"中使用"a.h"中声明的这些在"b.cpp"中实现的函数,通常都是在"c.cpp"中使用#include "a.h"

那么c.cpp是怎样找到b.cpp中的实现呢?

其实cpp文件名称和h文件名称没有任何直接关系,很多编译器都可以接受其他扩展名。

谭浩强老师的《C程序设计》一书中提到,编泽器预处理时,要对#include命令进行"文件包含处理":将headfile.h的全部内容复制到#include headfile.h"处。这也正说明了,为什么很多编译器并不care到底这个文件的后缀名是什么----因为#include预处理就是完成了一个"复制并插入代码”的工作。

程序编译的时候,并不会去找 b.cpp文件中的函数实现,只有在link的时候才进行这个工作。我们在 b.cppc.cpp 中用#include "a.h"实际上是引入相关声明,使得编译可以通过,程序并不关心实现是在哪里,是怎么实现的。源文件编译后生成了目标文件(.o或.obj文件〉,目标文件中,这些函数和变量就视作一个个符号。在link的时候,需要在 makefile里面说明需要连接哪个.o或.cbj文件(在这里是b.cpp生成的.o或.obj文件〕,此时,连接器会去这个.o或.obj文件中找在 b.cpp中实现的函数,再把他们 build到 makefile中指定的那个可以执行文件中。
在VC中,一般情况下不需要自己写makefile,只需要将需要的文件都包括在project中,VC会自动帮你把makefile写好。

通常,编译器会在每个.o或.obj文件中都去找一下所需要的符号,而不是只在某个文件中找或者说找到一个就不找了。因此,如果在几个不同文件中实现了同一个函数,或者定义了同一个全局变量,链接的时候就会提示"redefined".


参考链接:C语言中,头文件和源文件的关系

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在VSCode中进行C++多文件编译时,头文件关联是非常重要的。以下是一些基本的步骤来确保头文件正确关联: 1. 在源文件中包含头文件:在您的源文件(.cpp文件)中,使用`#include`指令来包含相关的头文件。例如,如果您有一个名为`example.h`的头文件,您可以在源文件中添加`#include "example.h"`来关联它。 2. 设置头文件搜索路径:如果您的头文件不在源文件所在的目录中,您需要设置头文件的搜索路径。在VSCode中,可以通过编辑`.vscode/tasks.json`文件中的构建任务来设置编译器的搜索路径。在编译命令中使用`-I`选项来指定头文件的路径。例如:`g++ -I/path/to/header-files main.cpp -o main` 3. 确保头文件源文件同名:为了方便管理,通常将头文件源文件命名相同,并使用`.h`和`.cpp`作为扩展名。这样可以更容易地找到和关联相应的头文件源文件。 4. 使用预编译指令:如果您的头文件用于定义常量、宏或模板类/函数等,您可能需要在使用它们的源文件中添加适当的预编译指令。例如,如果您在头文件中定义了一个模板类,您需要在使用该类的源文件中添加`template class ClassName<Type>;`来实例化模板。 请注意,具体的步骤和配置可能因您的项目和开发环境而有所不同。您可能需要根据实际情况自定义构建任务和编译选项。 希望这些步骤能帮助您在VSCode中成功进行C++多文件编译并正确关联头文件。如有任何问题,请随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值