Bjarne Stroustrup C ++ 0x SSS'den :
__cplusplus
C ++ 0x'de makro __cplusplus
, mevcut değerden farklı (daha büyük) bir değere ayarlanacaktır 199711L
.
Bu, birinin istediği kadar yararlı olmasa da. gcc
(görünüşe göre yaklaşık 10 yıldır) bu değer 1
, gcc 4.7.0 çıktığında düzeltilene kadar büyük bir derleyiciyi dışarıda bırakarak olarak ayarlanmıştı .
Bunlar C ++ standartlarıdır ve aşağıdakilerden hangi değeri beklemeniz gerekir __cplusplus
:
- C ++ C ++ 98 öncesi:
__cplusplus
is 1
.
- C ++ 98:
__cplusplus
olur 199711L
.
- C ++ 98 + TR1: Bu, C ++ 98 olarak okuyor ve bildiğimi kontrol etmenin bir yolu yok.
- C ++ 11:
__cplusplus
olur 201103L
.
- C ++ 14:
__cplusplus
olur 201402L
.
- C ++ 17:
__cplusplus
olur 201703L
.
Derleyici daha eski olabilirse gcc
, derleyiciye özgü bilgisayar korsanlığına başvurmalıyız (bir sürüm makrosuna bakmalı, onu uygulanan özelliklere sahip bir tabloyla karşılaştırmalıyız) veya Boost.Config ( ilgili makroları sağlayan ) kullanmalıyız. Bunun avantajı, yeni standardın belirli özelliklerini gerçekten seçebilmemiz ve özellik eksikse bir geçici çözüm yazabilmemizdir. Bu genellikle bir toptan çözüme göre tercih edilir, çünkü bazı derleyiciler C ++ 11'i uyguladığını iddia eder, ancak özelliklerin yalnızca bir alt kümesini sunar.
Stdcxx Wiki , C ++ 0x özelliklerinin derleyici desteği için kapsamlı bir matris barındırır (özellikleri kendiniz kontrol etmeye cesaret ederseniz).
Ne yazık ki, özelliklerin daha hassas bir şekilde kontrol edilmesi (örneğin, bireysel kütüphane işlevleri gibi std::copy_if
) yalnızca uygulamanızın derleme sisteminde yapılabilir (özellik ile kod çalıştırın, derlenip derlenmediğini ve doğru sonuçlar üretip üretmediğini kontrol edin - alıyorsanız autoconf
tercih edilen araçtır. bu rota).