我有包含 header.h 的 text.cpp 和包含 header.h 的 header.cpp。
header.cpp也会被编译吗?我在这里遵循指南,但我完全困惑了。
另外,我所问的正确术语是什么?我知道我听起来像个白痴,我很抱歉,但我很无知。
哦,
int main()
在test.cpp中。
另外,如果 header.cpp 包含
<iostream>
,为什么我不能在包含它的 text.cpp 中使用 iostream 函数调用?如果我在text.cpp中包含<iostream>
,它会被包含在程序中两次(换句话说,让它膨胀)吗?
您告诉编译器要编译哪些 C++ 文件。
#include
与此无关。
例如,如果您使用 g++:
g++ text.cpp // Doesn't compile header.cpp
g++ text.cpp header.cpp // Compiles both
(or, alternatively you can compile one file at a time and then link them)
g++ text.cpp -o text.o
g++ header.cpp -o header.o
g++ text.o header.o -o your-program
如果您使用 Visual Studio 并创建了一个项目,您创建的所有 C++ 文件都将被自动编译。
如果您两者都不使用,请告诉我您的编译器的名称,我可以告诉您确切的语法:)
现在,对于你的另一个问题:
另外,如果 header.cpp 包含 iostream,为什么我不能使用iostream 如果是的话,在text.cpp中调用函数 包括?如果我将 iostream 包含在 text.cpp 将其包含在 编程两次(换句话说,膨胀 它)?
#include
告诉编译器简单地“复制您所包含的文件的所有内容,并将它们粘贴到 #include 行所在的位置”。所以,理论上,你可以简单地用记事本打开iostream
,全选,在.cpp文件中按ctrl-c和ctrl-v,最终效果将完全相同=)
所以,是的,它需要包含在您希望使用它的每个 .cpp 文件中,并且它不会“膨胀”您的程序:它只包含类定义、外部函数等。
哦,这是不言而喻的,但是 C++ 是一种非常非常庞大且困难的编程语言,通过书籍学习它比通过指南学习它要好得多。如果您不想花任何钱,一本不错的免费(可下载)C++ 书籍是Thinking in C++,Bruce Eckel。否则,如果您想购买一个,您可以在这里找到一份不错的清单。
header.cpp
只有编译它才会被编译。当你编译时它不会被自动吸收 test.cpp
。要生成正在运行的程序,您还必须将生成的 .o
文件链接到单个二进制文件中,如下所示(过于简化):
c++ -c test.cpp
c++ -c header.cpp
c++ -o test test.o header.o
您单独或一起编译每个源文件,然后链接生成的对象模块。
例如Visual C++(一起)
cl text.cpp header.cpp /Fefoo
或单独,
cl /c text.cpp
cl /c header.cpp
link text.obj header.obj /out:foo.exe
要获得最终的 EXE 映像,
foo.exe
。
另外,如果 header.cpp 包含 ,为什么我不能使用 iostream 如果是的话,在text.cpp中调用函数 包括?如果我将 iostream 包含在 text.cpp 将其包含在 编程两次(换句话说,膨胀 它)?
由于标头仅包含声明,因此多次包含它们没有什么坏处。它们不会使任何东西膨胀,因为编译器在进行类型检查后会丢弃它们。
尽管如果其中有类型定义,则需要 #include 保护,以便类型不会被重新定义。