2009-11-06 14 views

Odpowiedz

9

Bjarne's C++0x FAQ mówi:

__cplusplus

w C++ 0x makro __cplusplus zostanie ustawiona na wartość, która różni się od (jest większy) bieżącego 199711L.

+2

Ale makro '__cplusplus' nie powinno być ustawione na' 199711L' dla dowolny kompilator, który nie implementuje standardu * full * C++ 98. – dalle

14

dla C++ 03 według 16,8/1 (Prede zdefiniowane nazwy makr):

Nazwa __cplusplus jest zdefiniowane wartości 199711L podczas kompilowania jednostki tłumaczeniowej C++.

C++ 0x projekt n2857 według 16,8/1 (Prede zdefiniowane nazwami makro):

Z nazwą __cplusplus jest z definicją w wartości [TBD] podczas kompilacji C jednostkę przenoszącą ++.

+0

Należy oczekiwać, że będzie to liczba> '200911L', ale <' 201012L' – MSalters

+0

Brak #defines dla określonej funkcjonalności? –

+0

Definicje określonych funkcji można zdefiniować za pomocą implementacji. Standard nie ma takich definicji. –

2

Oficjalna specyfikacja obejmuje wartość dla __cplusplus preprocesora makro, ale jak inni zwrócili uwagę, sugeruje to, że wszystko w specyfikacji jest realizowany. Co więcej, żaden aktualny kompilator (który znam) nie ustawia odpowiedniej wartości. Specyfikacja jest dobra i dobra, ale całkowicie niezaimplementowane bity dowolnej specyfikacji powinny być uważane za próbne; przecięcie specyfikacji i szerokiego wsparcia jest prawdziwym "standardem".

Powiązanym pytaniem jest "jak sprawdzić, czy jest włączona obsługa C++ 0x?", Np. z przełącznikiem kompilatora -std=c++0x. Odpowiedź na to pytanie jest specyficzna dla kompilatora i może ulec zmianie, ale zarówno GCC 4.6, jak i Clang 2.1 ustawiają makro preprocesora __GXX_EXPERIMENTAL_CXX0X__ (i nadają mu wartość 1), gdy włączona jest obsługa częściowego C++ 0x.

Powiązane problemy