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
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- 这个宏可以转换成函数吗? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
