c++ - 一个/C++项目的基本结构(头文件和cpp文件)

标签 c++ c include project header-files

这是一个脑残的新手问题,但是这里是:

什么决定了 C/C++ 项目中包含哪些文件?

我的理解是,编译器从其中包含 main() 的文件开始,该文件将包含 #include 以获取各种包含 #include 的 h 文件到其他 h 文件等等,直到所有内容都包含在项目中.

我的问题:

同名的h文件和cpp文件有什么关系?我的意思是,当然我明白在代码方面他们需要彼此并且 cpp 文件总是(几乎总是?)#include 是 h 文件,但是从编译器的角度来看,它们具有相同的名称很重要还是这一切只是约定俗成?我可以包含没有相应 h 文件的额外 cpp 文件吗?

此外,当构建和链接项目时,它如何知道要为哪些 cpp/h 文件构建目标文件?它是从包含“main()”的 cpp 文件开始并继续执行 #include 直到它拥有所需的一切并构建所有这些,还是只构建用户在 makefile 或IDE工程文件?

最后,当链接器最终出现并链接所有目标代码以生成可执行文件时,是否有特殊的顺序安排所有内容?

任何帮助、提示、解释表示赞赏.. 谢谢!

--R

最佳答案

在网络上稍作搜索就会得出很多答案。这里只有两个:http://www.psgd.org/paul/docs/cstyle/cstyle02.htm

http://www.cs.utexas.edu/~lavender/courses/EE360C/lectures/lecture-02.pdf

第二个不错。

我还推荐 c++ 编程语言第 3 版。有一个关于文件组织的重要部分。

至于编译器的作用,最好在另一篇文章中进行解释。简而言之,每个 cpp 文件都被编译成一个翻译单元(目标代码),然后链接器将所有内容连接在一起成为最终的可执行文件。

关于c++ - 一个/C++项目的基本结构(头文件和cpp文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878511/

相关文章:

c++ - 自定义外观 QTabWidget

c++ - 如何在编译时初始化一个 float 组?

c++ - 表达式树 printLevel() 函数

c - 如何使用 C 将二维数组写入文件?

c - yacc中生成IR码时如何避免冲突?

c# - ASP.Net - 如何包含另一个项目中的嵌入式 JavaScript 文件?

php - require_once 函数导致服务器错误

c++ - 如何获取放置在 MFC 对话框中的控件的大小和位置?

通过 void * 转换枚举

php - 像 PHP 一样处理 HTML 文件