c++包含语句和链接
C++ Include Statements and Linking
我总是被告知不要直接包含*.cpp
文件。
是良好的编程实践,只有#include *.h
文件,而不是*.cpp
文件?
是的,你可以认为这是很好的编程实践!
话虽如此,在编程中没有教条。我遇到过一些情况,在这些情况下,包含。h文件之外的其他文件非常有效。
但只有当你有相当多的经验和一个很好的理由偏离时才这样做。
关于使用头文件的原因:
c++是C的继承者。传统上,C和c++没有真正的模块机制,比如Modula或Ada。原则上,多个c++源文件是独立编译的,一旦编译完成,只有链接器才能看到它们。通过将类声明放在头文件中,头文件就变成了一种模块接口。通过在定义类成员的模块M的.cpp文件和使用该模块M的其他模块中包含头文件,创建了一个链接引脚。因此,编译器可以检查M中的声明是否与其他模块中的声明相匹配。
我还补充说,最重要的事实是,在c++中,我们必须区分定义和声明。如果编译器遇到两个相同的定义(函数或变量定义),则抛出错误并结束编译。如果我们想在多个独立编译的翻译单元中使用同一个函数,那么你需要声明这个函数。因此,我们将声明放在.hpp中,该文件可以被其他文件#include。在.cpp中放置定义(这意味着编译器分配内存)。让我们考虑一下不能放在。hpp文件中的全局变量或静态变量,因为如果编译器在同一个命名空间中遇到两个相同的定义,则退出编译。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- 将Typedef语句放入类链接链接列表中的C 错误
- 循环包含导致链接错误的语句
- include语句的顺序在链接步骤中如何重要
- c++包含语句和链接
- 我可以在 IF 语句中将比较链接在一起吗?
- if 语句 - 链接的 if-else 不起作用 (C++)