标题文件如何参考源文件C
How do header files reference source files c++?
我是C 新手。我对Python有过以前的经验,但是C 是我的第二语言。目前,我正在学习如何使用标题和源文件来帮助组织和编译项目的时间。我了解引用标头文件的正确语法(#include" foo.h"(,但我不明白标题文件本身如何涉及main.cpp中的源文件(foo.cpp(。我在标题文件中没有看到foo.cpp的任何引用,也没有在main.cpp中看到任何参考。编译器如何使用#include知道与foo.cpp一起缝制foo.h?如果这个问题是多余的,则表示歉意。我已经尝试了一下。我找到了很多有关如何使用标头和源文件的信息,但没有很好地解释它们的实际工作方式。
它没有。
首先,仅仅是因为有一个foo.h,并不意味着有一个foo.cpp。
因此,您的真正问题是"编译器如何知道将main.cpp和foo.cpp放入同一可执行文件中?"基本上,因为您告诉他们。
这在不同的OS,编译器和构建系统上完全不同,但基本上,您要做两件事之一。
a(单独编译文件,然后将它们链接在一起:
cl main.cpp
cl foo.cpp
link main.obj foo.obj
b(将它们编译在一起:
cl main.cpp foo.cpp
(这实际上只是以上的快捷方式,编译器会自动执行单个步骤(
他们没有。
每个.c
或.cpp
文件是产生OBJ文件(.o
(的单个汇编单元。这就是编译器所做的。每个OBJ文件可能包含未解决的引用。例如,如果您的main.cpp
使用foo.h
中声明并在foo.cpp
中实现的函数foo()
,则foo.o
将包含foo()
的编译代码,并且main.o
将包含main()
的编译代码,其中包括对foo()
的呼叫。但是,main.o
不知道foo()
实际在哪里,并且对foo.o
不知道。
然后,链接器将OBJ文件链接在一起。这是解决OBJ中未解决的参考文献的时间。链接器将main.o
和foo.o
作为其输入,然后将连接的零件产生whatever.exe
。如果函数无法解析(例如,您忘记在链接器调用中包含foo.o
(或在多个OBJ文件中使用相同名称的函数,则链接器将产生错误。
- C++错误消息*成员参考.**初学者*
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 为测试目标创建具有不同源文件夹的文件
- 参考资源文件VC++中的$(SolutionDir)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 将图像添加到资源文件夹UWP C++
- 为什么在运算符重载时需要参考?
- 视觉工作室项目.提取源文件夹名称
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- make 命令如何避免重新编译未更改的源文件?
- C++两个源文件之间共享的枚举的静态实例
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 生成文件:动态源文件名和对象目录
- std::shared_ptr 自定义参考计数器
- 无法使用 CMake 从其他文件夹添加源文件
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 避免在基于反向范围的for循环实现中悬挂参考
- 标题文件如何参考源文件C
- 使用TSHARK C 源文件时未定义的参考在添加所需库后剖析消息