Theo truyền thống, cách tiêu chuẩn và di động để tránh nhiều vùi tiêu đề trong C ++ là / sử dụng #ifndef - #define - #endif
lược đồ chỉ thị tiền biên dịch còn được gọi là lược đồ bảo vệ macro (xem đoạn mã bên dưới).
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
Tuy nhiên, trong hầu hết các triển khai / trình biên dịch (xem hình bên dưới), có một sự thay thế "thanh lịch" hơn, phục vụ cho cùng một mục đích như sơ đồ bảo vệ vĩ mô được gọi #pragma once
. #pragma once
có một số lợi thế so với sơ đồ bảo vệ vĩ mô, bao gồm ít mã hơn, tránh xung đột tên và đôi khi cải thiện tốc độ biên dịch.
Thực hiện một số nghiên cứu, tôi nhận ra rằng mặc dù #pragma once
chỉ thị được hỗ trợ bởi hầu hết tất cả các trình biên dịch đã biết, nhưng có một sự mơ hồ về việc liệu #pragma once
chỉ thị có phải là một phần của tiêu chuẩn C ++ 11 hay không.
Câu hỏi:
- Ai đó có thể làm rõ liệu
#pragma once
chỉ thị có phải là một phần của tiêu chuẩn C ++ 11 hay không? - Nếu nó không phải là một phần của tiêu chuẩn C ++ 11, có kế hoạch nào để đưa nó vào các bản phát hành sau (ví dụ: C ++ 14 trở lên) không?
- Sẽ rất tốt nếu ai đó có thể giải thích thêm về những lợi thế / bất lợi trong việc sử dụng một trong các kỹ thuật (nghĩa là bảo vệ vĩ mô so với
#pragma once
).
#pragma once
thường thì không.