在 C 和 C++ 程式設計中,標頭檔案(header files)是一種包含宣告和宏定義的檔案,通常具有 .h
或 .hpp
副檔名。它們用於提供給編譯器有關函式、類、常量和宏的宣告,而不包含具體的實現程式碼。標頭檔案主要用於以下幾個方面:
1. 函式宣告
標頭檔案通常包含函式的宣告,而不是定義。這允許函式在多個原始檔中被引用而不需要重複編寫函式的定義。例如:
// math_functions.h
#ifndef MATH_FUNCTIONS_H
#define MATH_FUNCTIONS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
在這個例子中,math_functions.h
標頭檔案宣告瞭兩個函式 add
和 subtract
。這些函式可以在其他原始檔中實現。
2. 類宣告
在 C++ 中,標頭檔案通常包含類的宣告。它定義了類的成員變數和成員函式,但不包含函式的具體實現。例如:
// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
public:
MyClass();
void doSomething();
private:
int data;
};
#endif
在這個例子中,MyClass.h
標頭檔案宣告瞭一個 MyClass
類及其成員函式。類的實現通常放在對應的 .cpp
檔案中。
3. 宏定義
標頭檔案可以包含宏定義,這些宏在預處理階段被替換。例如:
// constants.h
#ifndef CONSTANTS_H
#define CONSTANTS_H
#define PI 3.14159
#define MAX_SIZE 100
#endif
在這個例子中,constants.h
標頭檔案定義了兩個宏 PI
和 MAX_SIZE
,它們在編譯時被替換為相應的值。
4. 包含保護
為了防止標頭檔案被多次包含,標頭檔案通常使用包含保護宏。這些宏確保標頭檔案的內容只被處理一次。例如:
#ifndef HEADER_NAME_H
#define HEADER_NAME_H
// 標頭檔案內容
#endif
這個預處理指令組合確保了即使標頭檔案在同一翻譯單元中被多次包含,也不會導致重複定義。
5. 如何使用標頭檔案
標頭檔案通常透過 #include
指令包含到原始檔中。例如:
#include "math_functions.h"
#include "MyClass.h"
int main() {
MyClass obj;
obj.doSomething();
return 0;
}
在這個例子中,#include "math_functions.h"
和 #include "MyClass.h"
指令將標頭檔案的內容包含到 main.cpp
中。
6. 標頭檔案的組織
- 系統標頭檔案:如
<iostream>
,<vector>
等,它們是標準庫的一部分。 - 第三方庫標頭檔案:如 GLEW、GLFW 提供的標頭檔案。
- 專案自定義標頭檔案:專案中的自定義類和函式宣告所在的標頭檔案。
7. 總結
標頭檔案在程式的組織和模組化中扮演重要角色。它們使得程式碼的宣告與實現分開,從而提高程式碼的重用性和可維護性。透過合理使用標頭檔案,你可以減少重複程式碼,簡化程式碼管理,並提高編譯速度。