Tất cả các tập tin tiêu đề của tôi sử dụng bao gồm bảo vệ cũng như pragma một lần:"#pragma once" có khả năng gây ra lỗi không?
#pragma once
#ifndef FILE_NAME_H
#define FILE_NAME_H
class foo
{
//foo interface..
};
#endif /* FILE_NAME_H */
Tôi hiểu rằng pragma một lần không phải là tiêu chuẩn và có thể không phải trình biên dịch trên cùng, nhưng có bất kỳ cơ hội nó sẽ gây ra và lỗi? Sẽ tốt hơn nếu bằng cách nào đó kiểm tra xem nó có sẵn đầu tiên không?
#ifdef THIS_COMPILER_SUPPORTS_PRAGMA_ONCE
#pragma once
#endif
#ifndef FILE_NAME_H
#define FILE_NAME_H
class foo
{
//foo interface..
};
#endif /* FILE_NAME_H */
Tôi muốn cung cấp pragma một lần như một tùy chọn để có thể tăng tốc biên soạn và tránh tên va chạm, trong khi vẫn cung cấp khả năng tương thích giữa các trình biên dịch.
Tôi không thực sự biết C/C++, nhưng [bài viết MSDN này] (http://msdn.microsoft.com/en-us/library/d9x1s805%28v=vs.71%29.aspx) dường như gợi ý rằng những người không được công nhận bị bỏ qua. – Ryan
có thể trùng lặp của [Is #pragma khi bảo vệ an toàn bao gồm?] (Http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard) –
Xem thêm [Tại sao không C/C++ ´s #pragma sau khi đạt tiêu chuẩn ISO?] (Http://stackoverflow.com/questions/1695807/why-isnt-c-cs-pragma-once-an-iso-standard) –