2010-12-30 24 views
11

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?

+1

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

+0

" 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?) –

Trả lời

13

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.

+1

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

+0

Lưu ý rằng bản nháp mới nhất là n3225.pdf. –

+1

@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/ –

6

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.

+0

+1 để biết thông tin. – Klaim

-2

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?

+8

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

+6

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. –

Các vấn đề liên quan