我最近意识到,一般来说,我不知道 ac/c++ 编译器是如何工作的。我承认这最初来自于试图理解标头守卫,但后来意识到我缺乏编译的工作原理。
以 Visual C++ 为例;有“头文件”文件夹、“资源文件”文件夹和“源文件”文件夹。这些文件夹的分离以及您放入其中的内容有什么意义吗?对我来说,它们都是源文件。获取代码片段:
片段 1
//a1.h
int r=4;
和
//a1.cpp
int b //<--semicolon left out on purpose
和
//main.cpp
#include <iostream>
#include "a1.h"
void main()
{
cout << r;
}
编译器错误提示“a1.cpp(3) : fatal error C1004: unexpected end-of-file found” 我希望它不会因为 a1.cpp 文件不是 #included 哪里存在 main 方法下一个代码片段
片段 2
//a1.h
int r=4 //<--semicolon left out on purpose
和
//a1.cpp
int b = 4;
和
//main.cpp
#include <iostream>
void main()
{
cout << b;
}
由于“main.cpp(6) : error C2065: 'b': undeclared identifier”而出错。如果您像这样包含 a1.cpp
片段 3
//a1.h
int r=4 //<--semicolon left out on purpose
和
//a1.cpp
int b = 4;
和
//main.cpp
#include <iostream>
#include "a1.cpp"
void main()
{
cout << b;
}
编译器抱怨“a1.obj : error LNK2005: "int b" (?b@@3HA) already defined in main.obj”。int r = 4
片段 2 和 3 都忽略了没有缺少分号的事实,因为我怀疑它与其 xxxx.h 文件有关。如果我从片段 1 的项目中删除 a1.cpp 文件,那么它编译得很好。显然,我所期望的不是我得到的。有很多关于如何在 cpp 中编码的书籍和教程,但 cpp 在编译过程中处理文件和源代码的方式并不多。这到底是怎么回事?