日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 头文件 .h 理解与实践

發布時間:2025/4/5 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 头文件 .h 理解与实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

頭文件如何來關聯源文件?

這個問題實際上是說,已知頭文件“a.h”聲明了一系列函數(僅有函數原型,沒有函數實現),“b.cpp”中實現了這些函數,那么如果我想在“c.cpp”中使用“a.h”中聲明的這些在“b.cpp”中實現的函數,通常都是在“c.cpp”中使用#include “a.h”,那么c.cpp是怎樣找到b.cpp中的實現呢?

其實.cpp和.h文件名稱沒有任何直接關系,很多編譯器都可以接受其他擴展名。
譚浩強老師的《C程序設計》一書中提到,編譯器預處理時,要對#include命令進行“文件包含處理”:將headfile.h的全部內容復制到#include “headfile.h”處。
這也正說明了,為什么很多編譯器并不care到底這個文件的后綴名是什么----因為#include預處理就是完成了一個“復制并插入代碼”的工作。

程序編譯的時候,并不會去找b.cpp文件中的函數實現,只有在link的時候才進行這個工作。我們在b.cpp或c.cpp中用#include “a.h”實際上是引入相關聲明,使得編譯可以通過,程序并不關心實現是在哪里,是怎么實現的。源文件編譯后成生了目標文件(.o或.obj文件),目標文件中,這些函數和變量就視作一個個符號。在link的時候,需要在makefile里面說明需要連接哪個.o或.obj文件(在這里是b.cpp生成的.o或.obj文件),此時,連接器會去這個.o或.obj文件中找在b.cpp中實現的函數,再把他們build到makefile中指定的那個可以執行文件中。

在VC中,一幫情況下不需要自己寫makefile,只需要將需要的文件都包括在project中,VC會自動幫你把makefile寫好。
通常,編譯器會在每個.o或.obj文件中都去找一下所需要的符號,而不是只在某個文件中找或者說找到一個就不找了。因此,如果在幾個不同文件中實現了同一個函數,或者定義了同一個全局變量,鏈接的時候就會提示“redefined”.

代碼在這里

代碼結構
. ├── add.c ├── add_sub.h ├── main.c ├── Makefile └── sub.c

Makefile

可以看出代碼是被分別編譯的,最后才被鏈接成一個整體,一個可執行文件 main
main: add.o sub.o main.ogcc add.o sub.o main.o -o mainadd.o: add.c add_sub.hgcc -c add.c -o add.osub.o: sub.c add_sub.hgcc -c sub.c -o sub.omain.o:main.c add_sub.hgcc -c main.c -o main.o clean:rm -rf *.o main

總結

以上是生活随笔為你收集整理的c++ 头文件 .h 理解与实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。