2016-06-02 39 views
13

tôi chỉ có thể tìm thấy trong dự thảo tiêu chuẩn N4582 rằngTiêu đề thư viện chuẩn C++ có thể bao gồm tiêu đề C chuẩn không?

[res.on.headers/1] Một C++ tiêu đề có thể bao gồm tiêu đề khác C++.

Dường như không chỉ định rằng đầu đề C++ có thể bao gồm tiêu đề C chuẩn hay không.

Nếu được phép, không an toàn khi sử dụng tên chung được xác định trong tiêu đề C ngay cả khi tiêu đề này không được bao gồm (vì chương trình có thể bao gồm ngầm tiêu đề thông qua tiêu đề chuẩn C++)?

+0

Tôi thường làm điều này (trộn mã C và C++ một cách hiệu quả với nhau) và nó hoạt động. Cho dù nó được phép theo tiêu chuẩn, tôi không thể nói. – buffjape

Trả lời

3

Vì mục đích của câu hỏi bạn theo dõi (xung đột tên), có, chắc chắn là có thể. Lý do là thư viện chuẩn C++ bao gồm các tiêu đề C++ cho các nội dung thư viện chuẩn C và tiêu chuẩn cho phép chúng cung cấp tên trong không gian tên chung (ngoài việc ủy ​​quyền cung cấp chúng trong ::std).

Hơn nữa, dựa trên Phụ lục D [depr] của tiêu chuẩn C++, tiêu đề thư viện chuẩn C (phiên bản <:::.h>) cũng là một phần của thư viện chuẩn C++ (mặc dù không được chấp nhận). Điều này có nghĩa là [res.on.headers]/1 cho phép các tiêu đề C++ bao gồm chúng.

4

Mục D.3 C standard library headers tiêu chuẩn C++ tạo 26 tiêu đề chuẩn C trong C++. Vì vậy, đó là một phần của C++. Ngoài ra nhiều tiêu đề C khác tuân theo tập con được chia sẻ của các ngôn ngữ (có thể bằng cách #ifdef nhập một số thứ) làm cho cả hai, tiêu đề C và C++ hợp lệ.

Các vấn đề liên quan