Header File trong C là một tệp có phần mở rộng .h chứa các khai báo hàm C và các định nghĩa macro được chia sẻ giữa một số tệp nguồn. Có hai loại Header File: các tệp mà lập trình viên viết và các tệp đi kèm với trình biên dịch của bạn.
Bạn yêu cầu sử dụng một tệp Header File trong chương trình C với chỉ thị tiền xử lý C #include cũng giống như bạn đã thấy sự bao gồm của tệp tiêu đề stdio.h , đi kèm với trình biên dịch của bạn.
Một thực hành đơn giản trong các chương trình C hoặc C ++ là chúng ta giữ tất cả các hằng số, các macro, các biến toàn cầu của hệ thống và các nguyên mẫu hàm trong các tệp Header File.
Cả tệp người dùng và tiêu đề hệ thống đều được include bằng cách sử dụng chỉ thị tiền xử lý #include . Nó có hai dạng sau:
#include
Biểu mẫu này được sử dụng cho tệp tiêu đề hệ thống. Nó tìm kiếm một tệp có tên 'file' trong danh sách thư mục hệ thống tiêu chuẩn. Bạn có thể thêm các thư mục vào danh sách này với tùy chọn -I trong khi biên dịch mã nguồn của bạn.
#include "file"
Biểu mẫu này được sử dụng cho các tệp Header File của chương trình riêng của bạn. Nó tìm kiếm tệp có tên 'file' trong thư mục chứa tệp hiện tại. Bạn có thể thêm các thư mục vào danh sách này với tùy chọn -I trong khi biên dịch mã nguồn của bạn.
Lệnh #include hoạt động bằng cách chỉ thị bộ tiền xử lý C để quét tệp được chỉ định làm đầu vào trước khi tiếp tục với phần còn lại của tệp nguồn hiện tại. Đầu ra từ bộ tiền xử lý chứa đầu ra đã được tạo ra, tiếp theo là kết quả đầu ra từ tệp include, theo sau là đầu ra xuất phát từ văn bản sau chỉ thị #include. \
Ví dụ: nếu bạn có tiêu đề tệp header.h như sau:
char *test (void);
và một chương trình chính được gọi là program.c sử dụng tệp tiêu đề, như thế này:
int x;
#include "header.h"
int main (void) {
puts (test ());
}
trình biên dịch sẽ thấy cùng một dòng mã thông báo như nó sẽ nếu program.c đọc.
int x;
char *test (void);
int main (void) {
puts (test ());
}
Nếu một tập tin muốn thực hiện include hai lần, trình biên dịch sẽ xử lý nội dung của nó hai lần và nó sẽ dẫn đến một lỗi. Cách tiêu chuẩn để ngăn chặn điều này là gửi kèm toàn bộ nội dung thực của tệp trong một điều kiện, như thế này:
#ifndef HEADER_FILE
#define HEADER_FILE
the entire header file file
#endif
Cấu trúc này thường được gọi là trình bao bọc #ifndef . Khi tiêu đề được include một lần nữa, điều kiện sẽ là sai, bởi vì HEADER_FILE được xác định. Bộ tiền xử lý sẽ bỏ qua toàn bộ nội dung của tệp và trình biên dịch sẽ không nhìn thấy nó hai lần.
Đôi khi nó là cần thiết để chọn một trong các tập tin tiêu đề khác nhau để được đưa vào chương trình của bạn. Ví dụ, họ có thể chỉ định các tham số cấu hình được sử dụng trên các loại hệ điều hành khác nhau. Bạn có thể làm điều này với một loạt các điều kiện như sau:
#if SYSTEM_1
# include "system_1.h"
#elif SYSTEM_2
# include "system_2.h"
#elif SYSTEM_3
...
#endif
Nhưng khi nó phát triển, nó trở nên tẻ nhạt, thay vào đó bộ tiền xử lý cung cấp khả năng sử dụng macro cho tên tiêu đề. Điều này được gọi là bao gồm tính toán . Thay vì viết tên tiêu đề làm đối số trực tiếp của #include , bạn chỉ cần đặt tên macro ở đó:
#define SYSTEM_H "system_1.h"
...
#include SYSTEM_H
SYSTEM_H sẽ được mở rộng và bộ tiền xử lý sẽ tìm kiếm system_1.h như thể #include đã được viết theo cách đó ban đầu. SYSTEM_H có thể được định nghĩa bởi Makefile của bạn với tùy chọn -D.
Tài liệu về C liên quan khác bạn nên đọc: