2011-03-26 12 views
5

मेरे पास एक बहुत बड़ा सी ++ कोड बेस है (स्वयं लिखा नहीं है)। कई पुस्तकालय, कुछ इतने सिंथैक्टिक रूप से भारी नहीं हैं, कुछ बहुत ही हैं। दूसरों के बीच बूस्ट, कुछ ईजिन का भारी उपयोग है।gnu C++ 0x पिछड़ा संगतता स्थिति - क्या मैं इसे अभी चालू कर सकता हूं?

मुझे बस 0x की कुछ नई विशेषताओं से प्यार है और एक त्वरित संकलन/परीक्षण मुझे बताता है कि यह सब अच्छा लगता है। This question, and this one सुझाव देते हैं कि कुछ चीजें हैं जो मजाकिया गंध करती हैं।

मेरे वर्तमान स्थिति है:

  • gcc4.4.3
  • libstC++ 6-4.4
  • बढ़ावा-1.40
  • eigen 3.0 - beta3

std=c++0x ध्वज का उपयोग ।

मुझे पता है कि मानक समिति ने पीछे की संगतता और गंभीर दर्द का सामना किया है। मेरा सवाल है, क्या यह काम करता है? क्या मैं वह कोड ले सकता हूं, सी ++ 0x पर स्विच कर सकता हूं और निश्चित हो सकता हूं कि सबकुछ न केवल संकलित करता है बल्कि उम्मीद के अनुसार भी काम करता है?

मैं उच्च 0x जादू का उपयोग नहीं करता, केवल auto और कुछ सामान्य पसंदीदा स्पष्ट रूप से GNU C++0x status पर "कार्यान्वित" चिह्नित किए गए हैं।

+2

गर्म नई भाषा आज़माएं, इसे C89 कहा जाता है :)। सब कुछ पर काम करता है। आप इसे अपने सी ++ कंपाइलर में भी इस्तेमाल कर सकते हैं! नवीनीकरण पर तोड़ने की गारंटी नहीं है। –

+0

"sizeof ('a')" जैसी चीजें सी ++ कंपाइलर द्वारा संकलित होने पर अलग-अलग परिणाम उत्पन्न करती हैं, इसलिए सी 8 9 के साथ भी कोई गारंटी नहीं है। लेकिन क्या सी ++ 0x के तहत चुपचाप सी ++ 98 कोड बदलने वाले व्यवहार का कोई गैर-अनुक्रमित उदाहरण हैं? – Clinton

+0

@ क्लिंटन: http://stackoverflow.com/questions/5759232/stdvector-default-construction-c0x-and-breaking-changes –

उत्तर

2

आपके प्रश्न का कोई जवाब नहीं है, यह आपके कोड पर निर्भर करता है। संकलन करने की कोशिश करें, संकलन-समय की समस्याओं को ठीक करें। एक बार यह संकलित हो जाने के बाद, अपने परीक्षण के मामलों को चलाएं, और जो कुछ भी तय करने की आवश्यकता है उसे ठीक करें।

यदि आपके पास टेस्ट कोड नहीं है, तो वहां से शुरू करें।

+0

देखें मैं केवल पुस्तकालयों का एक टन हूं। उनमें से कुछ बहुत ही हेडर-केवल टेम्पलेट भारी हैं। मैं उन सभी का परीक्षण नहीं कर सकता। और इस तरह के रूप में एक प्रणाली में मैं जांच नहीं कर सकता कि कहीं कहीं रेंग रहा है या नहीं। – AndreasT

+2

कुछ लोग "एकीकरण परीक्षण" कहते हैं - आप जांचते हैं कि इन पुस्तकालयों का उपयोग अभी भी अपेक्षित रूप से काम कर रहा है। जीबीसी के अपने संस्करण के साथ लागू किए गए सी ++ 0x के साथ ठीक है या नहीं, यह देखने के लिए प्रत्येक लाइब्रेरी के विक्रेता/प्रोजेक्ट से जांचें। यदि आप यह भी नहीं बता सकते कि क्या सॉफ्टवेयर सही तरीके से काम कर रहा है, तो आप किसी और की अपेक्षा कैसे कर सकते हैं? चेतावनियों को चालू करने के लिए – Mat

3

मैं निश्चित रूप से जीसीसी 4.5 का उपयोग करने की अनुशंसा करता हूं, क्योंकि यह अधिक बग फिक्स और नवीनतम सी ++ 0x का एक और ठोस कार्यान्वयन खेलता है।

सवाल आप लिंक किए गए के संबंध में

:

  1. यह एक नए मंच पर सिर्फ एक प्रकार परिभाषा है। इसके बारे में चिंता न करें, यह वास्तव में कुछ भी तोड़ नहीं देगा या ठीक करने में कठोर होगा।

  2. यह अधिक जटिल सी ++ 0x फीचर्स में से एक है, लेकिन पीछे की संगतता पर इसका अधिक प्रभाव नहीं होना चाहिए (सिवाय इसके कि यदि बूस्ट एक कंपाइलर/भाषा बनने वाली सुविधा में खुद को हैक करने की कोशिश करता है सुविधा)। अगर वहाँ समस्याएं हैं

केवल असली तरीका जाँच करने के लिए, संकलक ध्वज पर बारी है, और अगर किसी भी समस्याओं पॉप अप को देखने के लिए है। बेहतर अभी तक, पूर्ण रूप से कई चेतावनियों को पहचानने के लिए पूरी तरह से चेतावनियां चालू करें (कम से कम जीसीसी पर, एमएसवीसी के पास इस संबंध में कुछ परेशानी की समस्या है)। हालांकि यह निविड़ अंधकार नहीं है। आप संगतता को पार करने के लिए विभिन्न कंपाइलर्स (जीसीसी/एमएसवीसी/इंटेल/क्लैंग) का उपयोग करना चाह सकते हैं, लेकिन सी ++ 0x के मामले में आप उन कंपाइलरों के सामान्य सबसेट तक सीमित रहेंगे जो आप जांचने के लिए उपयोग करते हैं। वर्तमान में मैं व्यापक रूप से सी ++ 0x का उपयोग करता हूं, और अंतिम मानक लागू होने पर होने वाली किसी भी समस्या को ठीक करने का इरादा रखता हूं।

+1

+1: कुछ चीजें खराब होने पर पता लगाने के लिए कंपाइलर के अंतर्निर्मित तंत्र में कुछ भरोसा है। फिर यह देखने के लिए परीक्षण करें कि वास्तव में यह वास्तव में अपेक्षित व्यवहार करता है या नहीं। –

+0

@ मैथ्यूयू: मैंने चेतावनी ध्वज का जिक्र नहीं किया, लेकिन यह एक अच्छा विचार है। संपादन में :) – rubenvb

+0

आह! मैंने पढ़ा * कंपाइलर ध्वज चालू करें * और सोचा कि आप चेतावनियों के बारे में बात कर रहे थे: डी –

1

कोड कोड के ज्ञान के बिना इसका उत्तर नहीं दिया जा सकता है।विशेष रूप से, 100% पिछड़ा संगतता के साथ आपको एक ही मानक के भीतर एक कंपाइलर को अपग्रेड/बदलकर आपको मिल सकता है:

यदि आपका कोड मानक नहीं है, तो यह कंपाइलर के लिए विशिष्ट सुविधाओं का उपयोग करता है या संस्करण, यदि इसमें अपरिभाषित व्यवहार का कोई उदाहरण है या आपके वर्तमान प्लेटफ़ॉर्म में काम करने के लिए अनिश्चित व्यवहार पर निर्भर करता है, तो यदि संकलित नहीं हो सकता है (यदि आप भाग्यशाली हैं) या रनटाइम पर अलग-अलग व्यवहार प्रदर्शित करते हैं (यदि आप भाग्यशाली नहीं हैं) ।

+0

+1, पोर्टेबिलिटी मुद्दों का सबसे बड़ा कारण हमेशा लगभग सही कोड रहा है। – MSalters

संबंधित मुद्दे