Header File trong C

Một Header file là một file với định dạng .h chứa các khai báo hàm và định nghĩa marco và có thể được chia sẻ qua nhiều file nguồn. Có 2 loại Header file là : File mà lập trình viên viết ra và file đi kèm với trình biên dịch của bạn.

Bạn yêu cầu việc sử dụng Header file trong chương trình bởi việc thêm nó vào chương trình, với ký tự tiền xử lý #include như việc bạn thêm stdio.h vào phần Header file, nó sẽ đi kèm với trình biên dịch của bạn.

Việc bao gồm Header file tương đương với việc bạn sao chép nội dụng của Header file nhưng bạn không cần phải làm như thế, mà chỉ cần #include, code bạn sẽ gọn và đẹp hơn mà vẫn sử dụng được nội dung của Header file.

Trong thực tế chương trình C và C++ chúng ta lưu trữ hầu hết các hằng số, marco và biến toàn cục và các nguyên mẫu của hàm trong các Header file và include các file này khi bạn cần sử dụng.

Cú pháp include trong C

Cả Header file người dùng và hệ thống đều được include sử dụng chỉ dẫn tiền xử lý #include. Dưới đây là 2 dạng:

#include 

Dạng này được sử dụng cho các file hệ thống. Nó sẽ tìm file với tên là file trong danh sách các thư mục của hệ thống.

#include "file"

Dạng này được sử dụng cho những file trong chương trình của bạn. Nó sẽ tìm kiếm các file với tên file trong thư mục cùng chứa với file hiện tại.

Hoạt động Include

Chỉ dẫn #include làm việc bởi chỉ đạo trực tiếp bộ tiền xử lý trong ngôn ngữ C để quét các file nhất định để thêm vào file hiện tại trước khi bắt đầu với đoạn mã nguồn hiện tại. Ví dụ nếu bạn có một Header file là header.h như sau:

char *test (void);

và chương trình chính gọi program.c để sử dụng Header file, giống như:

int x;
#include "header.h"int main (void)
{
   puts (test ());
}

và trình biên dịch sẽ thấy luồng token tương tự, khi chương trình program.c đọc như sau:

int x;
char *test (void);int main (void)
{
   puts (test ());
}

Once-Only Header

Nếu Header file được include 2 lần, trình biên dịch sẽ báo lỗi và in ra kết quả lỗi. Cách tiêu chuẩn để tránh trường hợp này dùng biểu thức điều kiện như sau:

#ifndef HEADER_FILE
#define HEADER_FILEthe entire header file file#endif

Trong trường hợp đã include rồi, chương trình trên sẽ không include lần 2 nữa.

Include với các điều kiện

Đôi khi bạn cần thiết phải chọn một trong số các header để include vào chương trình, bạn phải có tham số cấu hình của hệ điều hành để sử dụng. Bạn có thể thực hiện điều này với một dãy 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 số điều kiện này là nhiều, nó trở lên tẻ nhạt, thay vào đó bộ tiền xử lý cung cấp khả năng sử dụng một macro cho tên Header. Điều này được gọi là Include có điều kiện. Thay vì viết một tên Header như là tham số trực tiếp của #include, một cách đơn giản bạn đặt một tên macro ở đó thay cho nó:

#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 nếu #include đã được viết theo cách đó ban đầu. SYSTEM_H có thể được định nghĩa bởi file mà bạn tạo với tùy chọn -D.

Bình luận