Tiêu chuẩn C không tạo sự khác biệt giữa tiêu đề và nguồn file được gọi bằng #include
chỉ thị tiền xử lý:
6.10.2 Nguồn tập tin bao gồm
chế
1 Một chỉ #include
sẽ xác định tệp tiêu đề hoặc tệp nguồn có thể được xử lý bằng cách triển khai.
Semantics
2 Một chỉ thị tiền xử lý của mẫu
# include <h-char-sequence> new-line
tìm kiếm một chuỗi các nơi thực hiện xác định cho một tiêu đề xác định duy nhất bởi trình tự quy định giữa các < và> delimiters, và gây ra thay thế chỉ thị đó bằng toàn bộ nội dung của tiêu đề. Cách xác định các địa điểm hoặc tiêu đề được xác định là được thực hiện.
3 Một chỉ thị tiền xử lý của mẫu
# include "q-char-sequence" new-line
gây ra thay thế chỉ thị rằng toàn bộ nội dung của tập tin nguồn được xác định theo trình tự quy định giữa các "dấu phân cách. Các tập tin nguồn được đặt tên được tìm kiếm trong một cách thực hiện xác định. Nếu tìm kiếm này không được hỗ trợ, hoặc nếu tìm kiếm thất bại, chỉ thị được tái chế như thể nó đọc
# include <h-char-sequence> new-line
với chuỗi chứa giống hệt nhau (bao gồm cả> ký tự, nếu có) từ hoặc chỉ thị iginal.
Trình biên dịch có thể triển khai sơ đồ nơi tiêu đề chuẩn không thực sự được lưu trữ dưới dạng tệp trong hệ thống tệp. Nhưng chỉ thị #include "filename.h"
được quy định như tìm kiếm đầu tiên cho một tập tin theo một cách cụ thể hệ thống, và sau đó tìm kiếm tiêu đề tiêu chuẩn, nếu như chỉ thị đã #include <filename.h>
Lưu ý rằng các phần mở rộng tên tập tin .c
và .h
là thuần túy một quy ước để phân biệt các file chứa các khai báo và các tệp có chứa các định nghĩa mã và dữ liệu thực tế. Không có gì trong tiêu chuẩn làm cho quy ước này là một yêu cầu, ngoài các tên được sử dụng cho các tiêu đề chuẩn. Một số người sử dụng các công ước khác với các phần mở rộng khác nhau hoặc không có phần mở rộng ở tất cả cho các nhu cầu cụ thể, nhưng phần lớn các lập trình viên C sẽ coi đây là thực hành không tốt.
Shafik Yaghmour cung cấp báo giá từ C99 Lý do trong một câu trả lời cho một câu hỏi tương tự mà móng tay các ủy ban ý định về vấn đề này: https://stackoverflow.com/a/27262904/4593267
Ví dụ: bạn có thể nói '#include"/path/to/some/named/pipe "'. Tất nhiên, bạn sẽ mong đợi rằng đường ống được đặt tên luôn tồn tại cho mọi đơn vị biên dịch, nhưng đảm bảo rằng có thể khó hơn giá trị của nó (hãy nhớ rằng đơn vị biên dịch đầu tiên "lấy" đường ống được đặt tên có thể đóng ống đó cho các đơn vị biên dịch sau này) – inetknght
Bạn có thể thêm một chút ngữ cảnh xung quanh báo giá không? – edmz
Tôi cho rằng nhận xét của tôi liên quan đến '# include' hơn là các tiêu đề cụ thể. Bạn muốn ngữ cảnh nào hơn? – inetknght