Từ Tiêu chuẩn C ++ 11 (mỏ nhấn mạnh):
D.5 Tiêu đề thư viện tiêu chuẩn C [depr.c.headers]
- Để tương thích với thư viện tiêu chuẩn C ...
- Mọi tiêu đề C, mỗi tiêu đề có tên là form name.h , hoạt động như thể mỗi tên được đặt trong không gian tên thư viện chuẩn bởi tiêu đề cname tương ứng được đặt trong phạm vi không gian tên chung . Không xác định được liệu các tên này có được khai báo hoặc xác định lần đầu trong phạm vi không gian tên (3.3.6) của std không gian tên hay không và sau đó được đưa vào phạm vi không gian tên chung bằng cách sử dụng khai báo rõ ràng (7.3.3).
- Ví dụ: Tiêu đề cung cấp một cách
<cstdlib>
chắc chắn các khai báo và định nghĩa của nó trong không gian tên
std
. Nó cũng có thể cung cấp những tên này trong không gian tên chung. Tiêu đề <stdlib.h>
chắc chắn cung cấp các khai báo và định nghĩa giống nhau trong không gian tên chung , giống như trong Tiêu chuẩn C. Nó cũng có thể cung cấp những tên này trong không gian tên std
.
Việc sử dụng tiêu đề «name.h» không được dùng nữa, chúng đã được xác định là ứng viên để xóa khỏi các bản sửa đổi trong tương lai.
Vì vậy, tôi khuyên bạn nên bao gồm các tiêu đề «cname» và sử dụng các khai báo và định nghĩa từ std
không gian tên.
Nếu bạn phải sử dụng tiêu đề «name.h» vì một số lý do (nó không được dùng nữa, xem ở trên), tôi khuyên bạn nên sử dụng các khai báo và định nghĩa từ không gian tên chung.
Nói cách khác: thích
#include <cstdio>
int main() {
std::printf("Hello world\n");
}
kết thúc
#include <stdio.h>
int main() {
printf("Hello world\n");
}
C
ký hiệu thư viện vào không gian tên toàn cầu là bất hợp pháp, tôi thích sử dụng cácstd::
phiên bản đủ điều kiện hơn. (Thêm vào đó, tôi ước họ đã biến nó thành bất hợp pháp).