C/C++ header and implementation files: How do they work?(C/C++ 头文件和实现文件:它们是如何工作的?)
问题描述
这可能是一个愚蠢的问题,但我已经在这里和网上搜索了很长时间,但找不到明确的答案(我的尽职调查谷歌搜索).
This is probably a stupid question, but I've searched for quite a while now here and on the web and couldn't come up with a clear answer (did my due diligence googling).
所以我是编程新手...我的问题是,main 函数如何知道不同文件中的函数定义(实现)?
So I'm new to programming... My question is, how does the main function know about function definitions (implementations) in a different file?
例如.假设我有 3 个文件
ex. Say I have 3 files
- main.cpp
- myfunction.cpp
- myfunction.hpp
//main.cpp
#include "myfunction.hpp"
int main() {
int A = myfunction( 12 );
...
}
-
//myfunction.cpp
#include "myfunction.hpp"
int myfunction( int x ) {
return x * x;
}
-
//myfunction.hpp
int myfunction( int x );
-
我知道预处理器如何包含头代码,但是头和主函数如何知道函数定义存在,更不用说使用它了?
I get how the preprocessor includes the header code, but how do the header and main function even know the function definition exists, much less utilize it?
如果这不是很清楚,或者我对某些事情有很大的误解,我很抱歉,这里是新的
I apologize if this isn't clear or I'm vastly mistaken about something, new here
推荐答案
头文件 declares 函数/类 - 即在编译 .cpp
时告诉编译器记录哪些函数/类可用.
The header file declares functions/classes - i.e. tells the compiler when it is compiling a .cpp
file what functions/classes are available.
.cpp
文件定义了这些函数 - 即编译器编译代码并因此生成实际的机器代码来执行在相应的 .hpp
中声明的那些操作文件.
The .cpp
file defines those functions - i.e. the compiler compiles the code and therefore produces the actual machine code to perform those actions that are declared in the corresponding .hpp
file.
在您的示例中,main.cpp
包含一个 .hpp
文件.预处理器将 #include
替换为 .hpp
文件的内容.这个文件告诉编译器函数 myfunction
是在别处定义的,它接受一个参数(一个 int
)并返回一个 int
.
In your example, main.cpp
includes a .hpp
file. The preprocessor replaces the #include
with the contents of the .hpp
file. This file tells the compiler that the function myfunction
is defined elsewhere and it takes one parameter (an int
) and returns an int
.
因此,当您将 main.cpp
编译为目标文件(.o 扩展名)时,它会在该文件中注明它需要函数 myfunction
.当您将 myfunction.cpp
编译成目标文件时,目标文件中有一个注释,说明它具有 myfunction
的定义.
So when you compile main.cpp
into object file (.o extension) it makes a note in that file that it requires the function myfunction
. When you compile myfunction.cpp
into an object file, the object file has a note in it that it has the definition for myfunction
.
然后,当您将两个目标文件链接到一个可执行文件中时,链接器将最终联系起来 - 即 main.o
使用 myfunction
如myfunction.o
.
Then when you come to linking the two object files together into an executable, the linker ties the ends up - i.e. main.o
uses myfunction
as defined in myfunction.o
.
希望能帮到你
这篇关于C/C++ 头文件和实现文件:它们是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C/C++ 头文件和实现文件:它们是如何工作的?
基础教程推荐
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 从 std::cin 读取密码 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01