C++ 源文件和头文件

C++ 源文件和头文件,c++,c,C++,C,我在理解源文件和头文件方面遇到了困难。 假设 1我有一个源文件functions.cpp,其中在location/Users/xyz/Desktop/functions.cpp中包含名为“int addint x,int y”的函数 2包含源文件functions.cpp中函数声明的头文件filefunctions.h位于/Users/xyz/Documents/function.h中 3包含“main”函数的其他源文件main.cpp需要调用“functions.cpp”中定义的“add”函数

我在理解源文件和头文件方面遇到了困难。 假设

1我有一个源文件functions.cpp,其中在location/Users/xyz/Desktop/functions.cpp中包含名为“int addint x,int y”的函数

2包含源文件functions.cpp中函数声明的头文件filefunctions.h位于/Users/xyz/Documents/function.h中

3包含“main”函数的其他源文件main.cpp需要调用“functions.cpp”中定义的“add”函数。源文件“main.cpp”位于/Users/xyz/Downloads/main.cpp中

我将这些文件放在不同的位置,以便更好地理解这些概念

那么,如何使用functions.h将function.cpp链接到main.cpp呢

我应该在上面的例子中使用什么路径


另外,据我所知,.h文件提供了在其他地方定义的函数的声明,编译器调用在其他一些文件中定义的函数或尚未定义的函数时需要声明。是这样吗?如果我错了,请纠正我。

您应该在主文件中包含头文件的确切路径:

#include "/Users/xyz/Documents/function.h"
希望这有帮助


问候。

您的第一个问题没有答案。C++没有定义如何找到头文件,这取决于编译器,它们都有点不同。如果你想要一个答案,你必须在你的编译器的文档中查找细节。我建议你把所有东西都放在同一个目录里,不要再担心了

在问题的第二部分中,我觉得您的理解很好。

您使用include在functions.cpp和main.cpp中包含functions.h,然后编译main.cpp和functions.cpp。然后链接器链接两个生成的对象文件。在main.cpp中包含functions.h将允许您从main.cpp文件中的functions.h调用函数

至于文件路径,只要您向编译器指定查找代码所需的路径,就可以了

#include "functions.h"
您的代码不应该知道您选择如何排列源代码树。硬代码路径是为了赢得必须维护此代码的人的仇恨,这包括六个月后的您

无论构建系统是什么,都可以处理路径。这可以简单到:

g++ -I/Users/xyz/Documents -c functions.cpp

您关于声明/定义如何工作的陈述基本正确。

您可以使用完整路径

#include "/Users/xyz/Documents/function.h"
或者通常更可取的相对路径

#include "../Documents/function.h"
在链接最终可执行文件时,不要忘记指定.obj文件的完整路径或相对路径

#include "../Documents/function.h"