File header (tệp tiêu đề) trong C cho phép tách khai báo (prototype) hàm, hằng số, cấu trúc dữ liệu ra khỏi file nguồn chính, giúp mã nguồn mô-đun, dễ tái sử dụng và bảo trì.
Quy tắc tạo file header
- Đuôi mở rộng là
.h(ví dụ:my_math.h). - Chỉ chứa khai báo: prototype hàm, macro, hằng số,
struct,typedef, biếnextern. - Không chứa định nghĩa hàm (function body) hay biến toàn cục (trừ
statichoặcinline). - Sử dụng include guard để tránh include trùng lặp.
Cú pháp Include Guard
#ifndef MY_MATH_H
#define MY_MATH_H
// Khai báo ở đây
#endif // MY_MATH_H
Ví dụ hoàn chỉnh
1. File header: my_math.h
#ifndef MY_MATH_H
#define MY_MATH_H
// Hằng số
#define PI 3.14159265358979323846
// Prototype hàm
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
double circle_area(double radius);
#endif
2. File triển khai: my_math.c
#include "my_math.h"
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int div(int a, int b) { return b != 0 ? a / b : 0; }
double circle_area(double r) { return PI * r * r; }
3. File chính: main.c
#include <stdio.h>
#include "my_math.h" // Dùng dấu ngoặc kép cho header tự viết
int main() {
printf("5 + 3 = %d\n", add(5, 3));
printf("10 - 4 = %d\n", sub(10, 4));
printf("6 * 7 = %d\n", mul(6, 7));
printf("20 / 4 = %d\n", div(20, 4));
printf("Dien tich hinh tron (r=5): %.2f\n", circle_area(5.0));
return 0;
}
Biên dịch và chạy
gcc main.c my_math.c -o app
./app
Kết quả
5 + 3 = 8 10 - 4 = 6 6 * 7 = 42 20 / 4 = 5 Dien tich hinh tron (r=5): 78.54
Lưu ý quan trọng
- File
.hvà.cnên đặt cùng thư mục hoặc cấu hình đường dẫn include (-I). - Không bao giờ
#include "file.c"— chỉ include file.h. - Tránh đặt định nghĩa biến toàn cục trong header (gây lỗi multiple definition khi link).
Việc tách header giúp quản lý dự án lớn tốt hơn, cho phép nhiều file .c chia sẻ cùng một interface mà không cần biết chi tiết triển khai.