मुझे पता है कि सिद्धांत रूप में यह शायद अपरिभाषित व्यवहार है, लेकिन एक बड़ी परियोजना के साथ काम कर के हित में है, यहाँ जीसीसी के बारे में मेरे सवाल है:क्या अलग-अलग जीसीसी बोलीयां एक साथ जुड़ी हो सकती हैं?
मान लीजिए मैं gcc -std=c++98
के साथ एक लेन-देन इकाई, और एक अन्य संकलन -std=c++11
साथ, का उपयोग करते हुए सटीक एक ही संकलक स्थापना। क्या कोई गारंटी है कि मैं दो ऑब्जेक्ट फाइलों को जोड़ सकता हूं और एक अच्छी तरह से परिभाषित प्रोग्राम प्राप्त कर सकता हूं?
जहां तक मेरा बता सकते हैं, संभावित समस्याओं केवल भिन्न मैक्रो के कारण पुस्तकालय हेडर के विभिन्न दृश्यों से आ सकता है, और बदले में उन पर सबसे अच्छा को, नए सदस्य काम करता है, लेकिन कभी भी सदस्य वस्तुओं जोड़ना होगा मानक पुस्तकालय कक्षाएं।
इस किसी भी तरह यह स्वीकार्य अलग भाषा बोली विकल्पों के साथ एक बड़ी परियोजना के विभिन्न भागों संकलित करने के लिए होगा?
अद्यतन: मैं एक ओर्थोगोनल प्रश्न जोड़ना चाहिए: क्या (जैसे कि 4.3 और 4.6) जीसीसी के दो अलग संस्करणों, लेकिन उपयोग करने के बारे wht ही बोली विकल्प (-std=c++98
)? लिस्टिंग in this GCC documentation यह सुझाव देती है कि पुस्तकालय 4.2.2 और 4.6 के बीच दोनों दिशाओं में संगत है।
"एक शायद ही उम्मीद कर सकते हैं मानक पुस्तकालय पूर्वप्रक्रमक प्रतीक हैं, जो अपनी परियोजना में उपयोग किया जाता है के साथ संकलित की गई" - और भले ही वह था, और एक पल है कि मैक्रो के लिए लगता है 'MYPROG_CONFIG_FILE_LOCATION' का उपयोग 'memset.c' में किया जाता है, फिर उस शब्द का अर्थ' memset.c' को परिभाषित करता है जो आपके प्रोग्राम में इसके अर्थ से पूरी तरह से असंबंधित है। इसलिए यदि 'MYPROG_CONFIG_FILE_LOCATION' के साथ/बिना' memset.c' को संकलित करना बाइनरी संगतता में एक अंतर बनाता है, तो यह आपके प्रोग्राम को 'MYPROG_CONFIG_FILE_LOCATION' का उपयोग करने के लिए भी स्वतंत्र रूप से ऐसा करेगा। –
@SteveJessop हां। यहां तक कि अगर यह था, यह आपके लिए पारदर्शी होना चाहिए। व्यावहारिक रूप से, आपके नामस्थान में सभी प्रीप्रोसेसर प्रतीकों (यानी अंडरस्कोर से शुरू नहीं होते हैं, और दो आसन्न अंडरस्कोर नहीं होते हैं) _should_ सुरक्षित रहें। कार्यान्वयन नामस्थान में प्रीप्रोसेसर प्रतीक, जैसे '_GLIBCXX_DEBUG', नहीं होंगे। –