使用外部库时,是否必须包含头文件

  • 本文关键字:包含头 文件 是否 外部 c++ c
  • 更新时间 :
  • 英文 :


我正在尝试开发一个使用外部.a静态库的应用程序。

由于这个外部库文件中已经定义了符号,有没有办法跳过使用它的.cpp源文件中头文件的include语句?

换句话说,如果我已经有.a文件,为什么我需要.h文件?

提前感谢

是的,你必须。

编译器需要知道库所使用的数据类型,并且需要知道函数所采用的参数以及返回值的类型。它还需要知道库使用的全局对象。

换句话说,如果我已经有.a文件,为什么我需要.h文件

编译器不使用对象文件来检索有关函数、数据或类型的信息。您需要在源代码中指定它。对象文件不是C语言的一部分。

您不需要.h文件。您还可以在源代码中键入声明、函数原型。.h文件可以包含在源代码中,也可以在其他源代码文件中重复使用。

您可以这样做:

#a.cpp
#include <iostream>
void who_are_you()
{
std::cout << "I am An";
}

#b.cpp
#include <iostream>
void who_are_you()
{
std::cout << "I am Bn";
}

#main.cpp
#include <iostream>
void who_are_you();
int main()
{
std::cout << "who_are_you()n";
who_are_you();
return 0;
}

然后

g++ -c a.cpp
g++ -c b.cpp
ar -r libA.a a.o
ar -r libB.a b.o
g++ main.cpp libA.a -o withA
g++ main.cpp libB.a -o withB

的输出/其中A将是

who_are_you()
I am A

的输出/其中B将是

who_are_you()
I am B

但一般情况下,@0 ___________的答案是正确的,你必须这样做。如果您注意到,我们在主文件中定义了whoare_you的签名。

使用外部库时是否必须包含头文件?

从技术上讲,你不必这么做。但是头文件会让使用库变得更容易。

为什么我需要.h文件?

头文件声明并在某些情况下定义类型、函数和变量。


如果可以导入模块,则不一定需要包含标头。

编译器需要知道您从库中使用的资源的签名。这可以通过包含适当的头文件或自己提供签名来完成。

您不需要包含头文件,只要您为库中使用的资源提供签名/原型即可。

始终是。您也可以使用#include添加您现有的函数。编译器将为您包含特定的文件。

最新更新