Được rồi, hãy hiểu sự khác biệt giữa mã hoạt động và mã thụ động.
Mã hoạt động là triển khai các hàm, thủ tục, phương pháp, tức là các đoạn mã cần được biên dịch thành mã máy thực thi. Chúng tôi lưu trữ nó trong các tệp .c và chắc chắn chúng tôi cần phải biên dịch nó.
Mã thụ động không tự thực thi, nhưng cần phải giải thích các mô-đun khác nhau cách liên lạc với nhau. Thông thường, các tệp .h chỉ chứa các nguyên mẫu (các tiêu đề hàm), các cấu trúc.
Một ngoại lệ là các macro, chính thức có thể chứa một phần hoạt động, nhưng bạn nên hiểu rằng chúng đang sử dụng ở giai đoạn đầu của quá trình xây dựng (tiền xử lý) với sự thay thế đơn giản. Tại các macro thời gian biên dịch đã được thay thế cho tệp .c của bạn.
Ngoại lệ khác là mẫu C++, cần được triển khai trong tệp .h. Nhưng đây là câu chuyện tương tự như các macro: chúng được thay thế ở giai đoạn đầu (instantiation) và chính thức, mỗi instantiation khác là một kiểu khác.
Tóm lại, tôi nghĩ, nếu các mô-đun được tạo đúng cách, chúng ta không bao giờ nên biên dịch các tệp tiêu đề.
Nguồn
2013-07-02 03:36:09
Giả sử bạn chưa viết hello.c, nhưng bạn có tệp tiêu đề. Sau đó, bạn có thể sử dụng "gcc hello.h" để kiểm tra tệp tiêu đề cho các lỗi cú pháp. Nếu không, bạn phải tạo một tệp nguồn với một câu lệnh include cho hello.h (well ... Tôi đoán bạn sẽ phải làm điều đó anyway tại một số điểm). – Mark