Tiêu đề nói lên tất cả. Đã #pragma once
được chuẩn hóa cho C++ 0x chưa? Tôi không biết bất kỳ trình biên dịch nào không cung cấp một trình biên dịch, với hầu hết các ngữ nghĩa và tên giống nhau.Có phải `#pragma once` đã biến nó thành C++ 0x không?
Trả lời
Tất cả các chỉ thị #pragma
làm cho việc triển khai hoạt động theo cách được triển khai đã xác định.
Điều này đã không thay đổi giữa C++ 03 và bản nháp C++ 0x mới nhất (n3225.pdf). Bao gồm bảo vệ là lựa chọn thay thế di động.
Tôi biết rằng vệ sĩ là thay thế di động nhưng tôi nghĩ rằng nó có thể đã được chuẩn hóa anyway. – Klaim
Lưu ý rằng bản nháp mới nhất là n3225.pdf. –
@Prasoon: Vậy là xong. Trong phòng thủ của tôi, "bản nháp hiện tại" trên trang web WG21 không được cập nhật. http://www.open-std.org/jtc1/sc22/wg21/ –
Trình biên dịch Sun C++ (Solaris) không thực hiện nó. Và không, nó không có trong bản nháp C++ 0x.
+1 để biết thông tin. – Klaim
Nó cũng tầm thường để triển khai bằng #ifdef. Hiệu trưởng hướng dẫn cho phiên bản mới là gì? Thực hiện tất cả mọi thứ bạn có thể muốn và bồn rửa nhà bếp hoặc chỉ cung cấp cho bạn các công cụ tối thiểu để làm như vậy cho mình?
Bạn đang thiếu điểm. Một phần lớn của sandardisation là làm cho thực hành phổ biến là tối thiểu có sẵn cho các công cụ tuân thủ tiêu chuẩn. Như '#pragma once' IS được cung cấp bởi rất nhiều trình biên dịch và đã được chứng minh là hữu ích. Một tiêu chuẩn tương đương từ khóa sẽ hữu ích. – Klaim
bao gồm các nhân viên bảo vệ buộc bạn phải chọn các tên trong không gian tên tiền xử lý (một và duy nhất toàn cầu). đó là một nỗi đau. được cấp, hầu hết các dự án cần macro ở đâu đó, vì vậy họ đã giải quyết vấn đề chọn mã nhận dạng tiền xử lý mà không gây ra xung đột. tuy nhiên đó là một nỗi đau, và tôi vẫn thấy rất nhiều mã #ifdef FILENAME_H đang bay vòng quanh. đó là ARGH. các dự án hợp lý nhất sử dụng PROJECTNAME_FILENAME_SOMESUFFIX, điều này thật tốt, nhưng tốt .... IMO #pragma một lần chỉ là giải pháp tốt hơn. –
- 1. "#pragma once" có khả năng gây ra lỗi không?
- 2. Đây có phải là mã C++ 0x chính xác không?
- 3. Có phải phần _1 của C++ 0x không?
- 4. Có phải các biểu thức lambda của C++ 0x không có loại có tên không?
- 5. C# có tương đương với gói #pragma trong C++ không?
- 6. WebBrowser DocumentCompleted event fired more once once
- 7. Có phải i + = ++ i không xác định hành vi trong C++ 0x không?
- 8. C#: Có cần khôi phục cảnh báo pragma không?
- 9. C++ 0x tuples không có trình lặp nào, đúng không?
- 10. Bạn đã bắt đầu sử dụng C++ 0x chưa?
- 11. Đây có phải là tối ưu hóa C++ 0x hợp pháp không?
- 12. C++ 0x: các bộ dữ liệu có được phép không?
- 13. Lớp C++ không phải là cơ sở của chính nó
- 14. #pragma có từng thêm nhân viên bảo vệ không?
- 15. MessageQueue Disposed More Than Once
- 16. Làm thế nào các biến có thể được đặt thành NULL theo pragma nghiêm ngặt?
- 17. C++ 0x Lambda overhead
- 18. Đây có phải là mixin và nó có thể được thực hiện trong c + + không?
- 19. C++ 0x luồng
- 20. C++ 0x regex trong GCC
- 21. C++ lỗi: lớp đã không có thành viên mang tên
- 22. C++ 0x - Khi nào?
- 23. Đang sử dụng '!!' trong thực hành tốt C/C++ và nó có phổ biến không?
- 24. Có phải không gian bị bỏ qua giữa một sigil và tên biến của nó không?
- 25. Chức năng Unicode mới nào có trong C++ 0x?
- 26. Ruby: Cách đặt biến thành 0 hoặc, nếu nó đã được đặt, tăng thêm 1
- 27. C# đại biểu không làm việc như nó phải không?
- 28. CMake clang và C++ 0x
- 29. Có phải cgi đã chết không?
- 30. var trong C# - Tại sao nó không thể được sử dụng như một biến thành viên?
Xem thông tin này để biết [một lần trong '#pragma một lần'] (http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard/1946730#1946730) – Motti
" Hầu như "? Bạn đang sử dụng nó trong các trình biên dịch khác nhau mà không xử lý nó giống hệt nhau? Hoặc, bạn có biết tên nào khác không? (Nó không rõ ràng mà một trong những "gần như" áp dụng, hoặc cả hai?) –