2009-05-23 4 views
8

Tôi nhận được sự nghi ngờ cơ bản này. Tiêu đề STL không có tiện ích mở rộng .h.tại sao tệp tiêu đề STL không có phần mở rộng?

#include <vector> 
#include <map> 

Có lý do cụ thể nào đằng sau điều này không? Bất kỳ ai biết lịch sử đằng sau điều này, xin vui lòng chia sẻ.

EDIT:

@GMan tìm thấy Michael Burr's answer mà giải quyết câu hỏi này.

+3

Trùng lặp: http://stackoverflow.com/questions/441568/when-can-you-omit-the-file-extension-in-an-include-directive – GManNickG

+0

Cảm ơn @GMan. Tìm kiếm của tôi trong SO và Google không tiết lộ điều này. Đó là bởi vì câu hỏi được liên kết có chút khác biệt. Dù sao tôi cảm thấy câu trả lời của Michael Burr giải quyết câu hỏi của tôi. –

Trả lời

8
  • Chỉ thị của #include không phân biệt đối xử các loại tập tin (nó chỉ là một tôn vinh copy-paste hoạt động) - không tự động thêm của .h đang xảy ra.
  • C++ file header chuẩn được cung cấp mà không có sự mở rộng .h
  • Đôi khi ngược tập tin tiêu đề tương thích được cung cấp bởi các nhà cung cấp có cùng tên với phần mở rộng .h thêm

Tất cả đã làm với không gian tên . Các đối tác .h cho C++ header chuẩn thường # bao gồm C++ đúng tiêu chuẩn tiêu đề (không có phần mở rộng .h) và sau đó đưa ra một loạt các sử dụng (một cái gì đó như thế này):

FILE: iostream.h

#include <iostream> 

using std::iostream; 
using std::ostream; 
using std::ios; 
... 

trong khi headerfile không có phần mở rộng .h không gây ô nhiễm không gian tên với tất cả các lớp và kiểu đã xác định.

+3

iostream.h tồn tại? Tôi đang sử dụng C++ trong 8 năm, và tôi chưa bao giờ nghĩ đến điều đó ... – Calmarius