![](/img/trans.png)
[英]How to include an external header file when I have 1 header for 2 .cpp files?
[英]Do i have to include a header file when using an external library?
我正在嘗試開發一個使用 external.a static 庫的應用程序。
由於這個外部庫文件中已經定義了符號,有沒有辦法跳過使用它的.cpp 源文件中 header 文件的包含語句?
換句話說 - 如果我已經有了 .a 文件,為什么還需要 .h 文件?
提前致謝
你可以做這樣的事情:
#a.cpp
#include <iostream>
void who_are_you()
{
std::cout << "I am A\n";
}
#b.cpp
#include <iostream>
void who_are_you()
{
std::cout << "I am B\n";
}
#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
./withA 的 output 將是
who_are_you()
I am A
./withB 的 output 將是
who_are_you()
I am B
但通常@0___________ 的答案是正確的,你必須這樣做。 如果你注意到我們在主文件中定義了 who_are_you 的簽名。
使用外部庫時是否必須包含 header 文件?
從技術上講,您不必這樣做。 但是 header 文件將使使用該庫變得更加容易。
為什么我需要.h 文件?
header 文件聲明並在某些情況下定義類型、函數和變量。
如果您可以導入模塊,則不一定需要包含 header。
是的,你必須。
編譯器需要知道庫使用的數據類型,需要知道函數采用什么參數以及返回值是什么類型。 它還需要知道庫使用的全局對象。
換句話說 - 如果我已經有了 .a 文件,為什么還需要 .h 文件?
編譯器不使用 object 文件來檢索有關函數、數據或類型的信息。 您需要在源代碼中指定它。 Object 文件不是 C 語言的一部分。
您不需要.h
文件。 您還可以在源代碼中鍵入聲明 function 原型。 .h
文件可以包含在您的源代碼中,並可以在其他源代碼文件中重用。
編譯器需要知道您從庫中使用的資源的簽名。 這可以通過包含適當的 header 文件或自己提供簽名來完成。
您不需要包含 header 文件,只要您為從庫中使用的資源提供簽名/原型。
是的,總是。 您還可以使用#include
添加現有功能。 並且編譯器將為您包含特定的文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.