2009-11-06 36 views
11

Có bất kỳ chính thức hoặc không chính thức nào, #defines khi trình biên dịch tuân thủ Cpp0x không? Thậm chí tốt hơn, đối với chức năng Cpp0x cụ thể (~ # cpp0xlambda, # cpp0xrvalue, v.v ...)?#defined nếu trình biên dịch tuân thủ Cpp0x là gì?

(Đã không tìm thấy bất cứ điều gì về vấn đề này trên mạng)

Trả lời

9

Bjarne's C++0x FAQ nói:

__cplusplus

Trong C++ 0x vĩ mô __cplusplus sẽ được thiết lập để một giá trị khác với (lớn hơn) dòng điện 199711L.

+2

Nhưng macro '__cplusplus' không được đặt thành' 199711L' cho bất kỳ trình biên dịch nào không thực hiện tiêu chuẩn * đầy đủ * C++ 98. – dalle

14

Đối với C++ 03 theo 16,8/1 (Prede fi tên macro ned):

Tên __cplusplus được định nghĩa với giá trị 199711L khi biên soạn một đơn vị dịch C++.

Đối với C++ 0x dự thảo n2857 theo 16,8/1 (Prede fi tên macro ned):

Tên __cplusplus là de fi định nghĩa với giá trị [tbd] khi soạn thảo một đơn vị dịch thuật C++.

+0

Có thể xem lại đây là số> '200911L' nhưng <' 201012L' – MSalters

+0

Không #defines cho chức năng cụ thể? –

+0

Xác định chức năng cụ thể có thể được xác định bằng cách triển khai. Tiêu chuẩn không có định nghĩa như vậy. –

2

Các spec chính thức bao gồm một giá trị cho tiền xử lý vĩ mô __cplusplus, nhưng như những người khác đã chỉ ra, điều này cho thấy tất cả mọi thứ trong spec được thực hiện. Thêm vào thời điểm này, không có trình biên dịch hiện tại nào (mà tôi biết) thiết lập giá trị thích hợp. Thông số kỹ thuật là tốt và tốt, nhưng các bit hoàn toàn chưa được thực hiện của bất kỳ thông số kỹ thuật nào cần được xem xét dự kiến; giao điểm của spec và hỗ trợ rộng là "chuẩn" thực sự.

Câu hỏi liên quan là "làm cách nào tôi có thể biết liệu ít nhất một số hỗ trợ C++ 0x có được bật không?", Ví dụ: với công tắc biên dịch -std=c++0x. Câu trả lời cho câu hỏi đó là cụ thể cho trình biên dịch và có thể thay đổi, nhưng cả GCC 4.6 và Clang 2.1 đều đặt macro tiền xử lý __GXX_EXPERIMENTAL_CXX0X__ (và cung cấp giá trị 1) khi hỗ trợ một phần C++ 0x được bật.

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