是否需要包含头文件?
Is including header file necessary?
add.h:
int add(int x, int y); // function prototype for add.h -- don't forget the semicolon!
为了在main.cpp中使用此头文件,我们必须 #include 它(使用引号,而不是尖括号(。
主.cpp:
#include <iostream>
#include "add.h" // Insert contents of add.h at this point. Note use of double quotes here.
int main()
{
std::cout << "The sum of 3 and 4 is " << add(3, 4) << 'n';
return 0;
}
添加.cpp:
#include "add.h"
int add(int x, int y)
{
return x + y;
}
嗨,我想知道,为什么我们在文件 add.cpp 中有 #include"add.h"?我认为没有必要。
C++每个文件都以所谓的"翻译单元"单独编译。基本上,在大多数设置中,翻译单元是单个.cpp文件的编译。
当编译器编译一个.cpp文件时,他看不到存储在其他.cpp文件中的信息。它只能看到这个.cpp文件。
#include
是一个简单的文本替换指令。 #include "add.h"
告诉编译器将文件的内容按原样插入文件add.h
(在编译器特定的包含搜索路径中找到(main.cpp
。
当你写add(3, 4)
编译器需要知道add
。它返回什么?是unsigned long long
论据还是unsigned char
论据?为了告诉编译器函数返回类型和参数类型,我们使用函数声明,例如int add(int, int);
。或者int add(int something, int anything);
.函数声明中的参数名称在这里用作程序员的文档 - 编译器的重要部分是类型。
编译器看不到存储在 add.cpp
中的信息。它(通常(被编译为一个单独的翻译单元。因此,我们需要告诉编译器有关add()
函数的类型。该信息通常存储在包含在两个翻译单元中的标头中 - 在使用该函数的"消费者"main.cpp
中,以及在实现函数及其作用的"实现"add.cpp
中。通常,标头的名称与实现具有不同扩展名的函数的文件相同。
为什么我们在文件中添加.cpp中有 #include"add.h"?
主要是作为程序员对错误和更改的防御。由于两个翻译单元是单独编译的,因此程序员的工作是在它们之间正确同步信息。
如果你#include "add.h"
更改函数的返回类型,例如add
,但忘记在实现中更改它,编译器会抱怨。当使用 class
es 时,标头的使用变得越来越重要,它们在标头中的一个位置定义了所有类成员、继承等。
为了"同步"接口和实现以减少错误,我们在使用者和实现中包含带有声明的标头。这样,如果您碰巧更改了函数的返回类型,但忘记更改add.cpp
文件,编译器就会抱怨。
我认为没有必要。
对于这么简单的项目,没有必要,但如果你不这样做,我会认为它是"糟糕的风格"或"意大利面条代码"。add.h
文件告诉我add.cpp
文件中的内容 - 定义了哪些函数。
为什么我们在文件
add.cpp
中有#include "add.h"
?我认为没有必要。
在这种情况下,不,这不是必需的,但也不是有害的。
像这样的一揽子样式规则有助于避免代码更改时可能出现的问题,尤其是在具有多个作者的大型项目中。
当然,没有必要。但是,在实际项目中,具有更多函数或类声明。它将成为强制性的。
因此,这是一个很好的做法,编译器需要一点时间来解析它。
- 使用mongocxx驱动程序时包含头文件问题
- 如何为包含头文件的目标编写生成文件?
- 如何在 CMakeLists.txt Qt Creator 中包含头文件?
- 当包含头文件的文件不在根项目文件夹中时,如何包含它
- 在生成文件先决条件中包含头文件的原因
- My Project的属性配置正确,但Visual Studio仍然无法打开包含头文件
- 在 PostgreSQL C 扩展中包含头文件
- 是否可以在C++中以间接方式包含头文件
- 是否需要包含头文件?
- 如何在不包含完整的文件系统头的情况下使用文件系统的类路径C++17?
- 我收到未声明的标识符错误,但我已包含头文件?
- 为什么我们需要构建一个提升库,仅仅包含头文件还不够吗,因为提升是模板
- C++:当顺序真正重要时,如何保证在项目中包含头文件的顺序
- 如何在C++中包含头文件时错误地重载
- 我在C++中无效使用不完整的类型类错误,如何正确包含头文件?
- 虚幻引擎4.16,C++包含头文件
- C++多次包含头文件
- 令牌之前的预期类名 '{' - 包含头文件和 CPP 文件
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 有条件地将文件包含在C++标头中