c++ - c ++标头之间的特殊性
问题描述
(something.h、Csomething 和 something )之间有什么区别?
我已经搜索了互联网,但我无法理解,哪些是库,哪些标头,哪些是预处理器的指令?。
我来自python并且总是调用模块的方法或类,使用的语法:
name_modulo.class () or name_modulo.method ()
在c++中不需要调用模块的名称(指令,或者头文件,我真的不知道),只有需要的类或方法会被直接调用。
为什么会这样?
解决方案
在 C/C++ 中,“编译单元”可能包含 C 源代码(.c 文件)、C++ 源代码(.cpp 文件)或要在编译时合并的声明(.h“头”文件)。
Python 中的等价物是“模块”(.py 文件)。
详细说明:
https://www.cs.auckland.ac.nz/references/unix/digital/AQTLTBTE/DOCU_015.HTM
编译单元是被编译并视为一个逻辑单元的 C 源代码。编译单元通常是一个或多个完整文件,但也可以是文件的选定部分,例如,如果使用#ifdef 预处理器指令来选择特定的代码段。编译单元中的声明和定义决定了函数和数据对象的范围。
使用#include 预处理器指令包含的文件成为编译单元的一部分。由于条件包含预处理器指令而跳过的源代码行不包含在编译单元中。
编译单元对于确定标识符的范围以及确定标识符与其他内部和外部标识符的链接非常重要。第 2.3 节讨论范围。第 2.8 节讨论了链接。
一个编译单元可以通过以下方式引用其他编译单元中的数据或函数:
一个编译单元中的函数可以调用不同编译单元中的函数。可以为数据对象分配外部链接,以便其他编译单元可以访问它们(参见第 2.8 节)。由多个编译单元组成的程序可以单独编译,然后链接生成可执行程序。一个合法的 C 编译单元至少包含一个外部声明,如第 4.3 节中所定义。
推荐阅读
- ios - SwiftUI 中的导航协调器
- java - 是否可以创建多个同名的spring bean(来自不同的接口)?
- javascript - 如何在 JSGrid 中添加过滤器
- .net - 我有一个来自 Controller 的 ViewBag 值,它改变了我的页面标题名称
- javascript - chrome 扩展:在 content.js 和 popup.js 之间的通信中没有收到消息响应
- r - 单击即可下载数据表中的所有行
- c - 为什么我不能返回链表中给定数字的素数?我添加了结构、函数、main 和 print 函数
- java - exe4j高dpi设置
- android-studio - Flutter 为我的自定义插件加载 Kotlin 而不是 Java
- jquery - 从部分视图提交时无法获取序列化表单数据?