![]() |
1
2
头文件是必需的,因为编译后的二进制文件没有包含足够的信息供编译器使用。对于一些基于平台的变量,C二进制文件通常只有足够的元数据来按名称标识函数和全局变量。元数据不包括参数的类型(或计数)、返回类型、结构或联合定义、全局变量的类型或大小等。所有这些信息通常都编码在随库分发的标头中。(方便的是,它还意味着对开发人员隐藏头中不存在的任何内容;这允许您在库中创建用户不应直接调用的非公共函数。) 在某些平台上,二进制文件甚至不包含函数名。相反,函数由它们在“序数表”中的位置引用。在这些平台上,库必须提供一个头文件、可执行二进制文件和一个附加文件,该文件从头文件中函数的名称转换为序数表中函数的索引,这样“void hello(void)”就可以是链接器的“序数表中索引3处的函数”。 相反地,包含一个头并不(通常)链接到它所伴随的库。这在某些平台上是可能的,比如Windows,它有一些特殊的编译器指令,可以放在头中,告诉链接器链接到某个库,但这不是标准行为,你不能指望它在任何其他平台上都是现实。 即将推出的是一些模块,它们提供了更好的用户体验,可以与二进制文件进行链接。模块是另一个可以用二进制文件打包的文件,上面写着“这里是我的所有头文件,这里是我的所有库”。使用模块,可以编写类似于“import MyLibrary;”的内容,并且可以获得所需的所有标题和链接器参数。我相信目前还没有C标准模块,C++是用C++ 20实现的。 |
![]() |
Daniel Viaño · 将函数移动到不同的文件 7 年前 |
|
Trojax · 编译多个。c和。h文件 7 年前 |
![]() |
Stevoisiak · 为什么#包含打破全局变量? 7 年前 |
![]() |
jaxonjma · 在另一个JSP中动态发送并包含JSP 7 年前 |