Chỉ cần nhìn thấy điều này trong <boost/asio.hpp>
Lý do cho #pragma một khi nằm trong bộ phận bảo vệ tiêu đề là gì?
#ifndef BOOST_ASIO_HPP
#define BOOST_ASIO_HPP
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
/// ....
#endif // BOOST_ASIO_HPP
Bất chấp các _MSC_VER
kiểm tra tiền xử lý, lợi ích của việc có các #pragma once
trong trường hợp này là gì? Không bảo vệ tiêu đề tiền xử lý đảm bảo trong mọi trường hợp và trên tất cả các nền tảng, nội dung tiêu đề chỉ bao giờ là included
một lần?
Bạn nói tiêu đề được mở và chỉ đọc một lần nếu chúng tôi có #pragma? Bảo vệ tiêu đề có nghĩa là tệp luôn được mở nhưng nội dung trong phạm vi bảo vệ bị bỏ qua, phải không? Tôi hiểu có đúng không? Nếu tôi chỉ có thể chứng minh điều này vì vậy tôi thấy nó xảy ra :) – dubnde
Trong trường hợp #pragma một khi nó không phải lúc nào cũng được mở ra. Chỉ thị này làm cho trình biên dịch nhớ không mở lại (nhiều lần). Đó là lý do tại sao chỉ thị này vượt trội hơn #ifndef, có thể bỏ qua. Tuy nhiên nhiều người vẫn sử dụng #ifndef để hỗ trợ các trình biên dịch cũ mà không nhận ra #pragma một lần. –