C++ में __cplusplus मैक्रो का उपयोग करके कंपाइलर द्वारा उपयोग किए जा रहे C++ स्टैंडर्ड वर्जन का पता लगाया जा सकता है। विभिन्न स्टैंडर्ड के लिए इसके मान अलग-अलग होते हैं।
स्टैंडर्ड और __cplusplus मान
| C++ स्टैंडर्ड | __cplusplus मान |
|---|---|
| Pre-C++98 | 1 |
| C++98 | 199711L |
| C++11 | 201103L |
| C++14 | 201402L |
| C++17 | 201703L |
| C++20 | 202002L |
| C++23 | 202302L |
उदाहरण कोड
#include <iostream>
int main() {
std::cout << "__cplusplus = " << __cplusplus << "L\n\n";
if (__cplusplus >= 202302L)
std::cout << "C++23 or later\n";
else if (__cplusplus == 202002L)
std::cout << "C++20\n";
else if (__cplusplus == 201703L)
std::cout << "C++17\n";
else if (__cplusplus == 201402L)
std::cout << "C++14\n";
else if (__cplusplus == 201103L)
std::cout << "C++11\n";
else if (__cplusplus == 199711L)
std::cout << "C++98\n";
else
std::cout << "Pre-standard C++\n";
// फीचर टेस्ट मैक्रोज़ (C++20+)
#ifdef __cpp_concepts
std::cout << "Concepts supported\n";
#endif
#ifdef __cpp_modules
std::cout << "Modules supported\n";
#endif
#ifdef __cpp_coroutines
std::cout << "Coroutines supported\n";
#endif
return 0;
}
आउटपुट (उदाहरण)
__cplusplus = 201703L C++17
कंपाइलर फ्लैग्स:
- GCC/Clang:
-std=c++17,-std=c++20,-std=c++23 - MSVC:
/std:c++17,/std:c++20,/std:c++latest
महत्वपूर्ण: __cplusplus केवल भाषा स्टैंडर्ड बताता है, लाइब्रेरी फीचर्स नहीं। विशिष्ट फीचर्स के लिए फीचर-टेस्ट मैक्रोज़ (__cpp_lib_*, __cpp_*) का उपयोग करें।