C++ 学习之旅(3)——头文件Header
我們知道,在C++中,函數只能定義一次,而在cpp文件中如果想使用其他cpp文件中定義了的函數,就必須聲明,這樣才能通過編譯,然后鏈接器才會在調用函數時找到該函數的定義。那么當函數聲明很多的時候,代碼就會很臃腫。這時,我們就可以使用.h頭文件,通過#include "頭文件"的方式,實現函數聲明的功能。
先說下雙引號""和尖括號<>的區別:
#include <xxx.h>系統自帶的頭文件用尖括號括起來,這樣編譯器會在系統文件目錄下查找。
#include “xxx.h”用戶自定義的文件用雙引號括起來,編譯器首先會在用戶目錄下查找,然后在到C++安裝目錄(比如VC中可以指定和修改庫文件查找路徑,Unix和Linux中可以通過環境變量來設定)中查找,最后在系統文件中查找。
所以實際上,無論這個文件是C++提供的還是自己編寫的,使用#include "文件名"命令一定是正確的。但是,標準規定,包含C++提供的標準頭文件或系統頭文件時應使用尖括號,包含自定義頭文件時可使用雙引號。 以后我們還是按照標準來寫比較好。
在VS中,我們在Header Files下新建一個.h文件,會出現這句代碼:
#pragma once這個實際上是規定在cpp文件中引用這個.h文件只能#include一次。可能我們有疑問,為什么會有人多次#include同一個頭文件呢?再說,函數聲明多次也無所謂呀。
雖然函數可以多次聲明,但是如果在頭文件中定義了結構體之類的,多次定義就會有問題。假設a.h #include了b.h,而在main.cpp中同時#include了a.h和b.h,這樣就相當于引用了a.h兩次,此時如果沒有上述代碼就會報錯。
還有另一種檢查的方法,如下:
Log.h
#ifndef _LOG_H #define _LOG_Hvoid Log(const char* message);#endifLog.cpp
#include <iostream> #include "Log.h" #include "Log.h"void InitLog() {Log("Initialized Log"); }Log.cpp經過預處理后的實際效果如下:
如果多次#include了Log.h文件,相當于在cpp文件中存在兩段相同的代碼,如圖所示。加上檢查語句之后,只有第一段代碼高亮,而第二段代碼變灰,表明相同的代碼只會執行一次,即相當于只#include了一次。
總結
以上是生活随笔為你收集整理的C++ 学习之旅(3)——头文件Header的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么水果减肥最有效
- 下一篇: C++ 学习之旅(4)——调试Debug