स्टैंडर्ड अनुरूप सी ++ compilers क्या मानक एक फ़ाइल किया जा रहा संकलित, जैसे है के तहत निर्धारित करने के लिए preprocessing के दौरान एक __cplusplus
मैक्रो जो निरीक्षण किया सकता है परिभाषित:इंगित सी ++ एक मानक तरीके से स्रोत में मानक
#if __cplusplus < 201103L
#error "You need a C++11 compliant compiler."
#endif
#include <iostream>
#include <vector>
int main(){
std::vector<int> v {1, 2, 3};
for (auto i : v){
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
मेरा प्रश्न है:
- वहाँ इंगित करने के लिए एक मानक तरीका है क्या मानक एक स्रोत फ़ाइल के साथ संकलित किया जाना चाहिए?
कि निर्माण उपकरण संकलन से पहले -std=
के लिए उपयुक्त तर्क (cf. कुटिया के जो पटकथा भाषा/संस्करण का संकेत कर सकते हैं: #!/usr/bin/env python3
) निर्धारित करने के लिए सूत्रों का कहना है का निरीक्षण करने की अनुमति होगी।
एक गैर मानक और भंगुर तरह से मैं के बारे में सोच सकते हैं __cplusplus
की पूर्वप्रक्रमक जांच के लिए लेकिन उपरोक्त उदाहरण मैं भी लिख सकता में लग रही है:
#if __cplusplus <= 199711L
#error "You need a C++11 compliant compiler."
#endif
इसलिए, लेखन उदा सभी बदलावों को पकड़ने के लिए एक रेगेक्स काफी मुश्किल हो जाएगा।
संपादित करें:
मैं @Gary द्वारा जवाब जो एक निर्माण प्रणाली पर भरोसा करने का सुझाव, के साथ सहानुभूति हालांकि यह मानता है कि हम वास्तव में एक निर्माण कदम होगा।
लेकिन आप पहले से ही आज कर सकते हैं:
- उपयोग एक दुभाषिया एक सी उदा का उपयोग कर चलाने के लिए ++ कार्यक्रम CINT
- या उदाहरण के लिए स्रोत अनुवाद के लिए स्रोत का उपयोग करें rosecompiler
मेरा प्रश्न यह दर्शाता है कि स्रोत C++ है और कौन-सा संस्करण इसके लिए इरादा था (कल्पना किसी को अब से 70 साल मेरे कोड बाहर खुदाई जब सी ++ के रूप में कहते हैं कि आज कोबोल है के रूप में लोकप्रिय हो सकता है) के बारे में भी है ।
मुझे लगता है कि बराबर बात मैं तलाश कर रहा होगा एचटीएमएल के सी ++ equiavlent है: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
ब्याज से बाहर, तुम क्यों परवाह है? यदि आप 98 में संकलित करने वाले कोड को लिखते हैं तो इसे 03 या 11 में संकलित किया जाना चाहिए (आप बहिष्कृत कार्यों का उपयोग कर सकते हैं - संभावित रूप से), लेकिन इसे संकलित करना चाहिए - तो उद्देश्य क्या है? – Nim
@Nim मुझे लगता है कि यह * न्यूनतम संस्करण * फ़ाइल अनुरोधों के बारे में है। – leemes
@leemes, मुझे सवाल पूछने दो, अगर कोई फ़ाइल कहती है कि इसे 98 के साथ संकलित किया जा सकता है, तो क्या इस फ़ाइल के लिए 'std = 'बदल दिया जाता है? यदि नहीं, तो इस दृष्टिकोण से आईएमएचओ का कोई मतलब नहीं है, प्रोजेक्ट लेवल पर आप किस संस्करण का उपयोग कर रहे हैं, और संभावित रूप से पुरानी कंपाइलर्स को संभालने के लिए फ़ाइल में चेक है (अगर यह बहुत पुराना है तो इसे अस्वीकार करने के लिए ...) – Nim