2013-03-19 4 views
5

मुझे इस सी ++ लाइब्रेरी के लिए बाइनरी संगतता बनाए रखना है जिसे मैं काम कर रहा हूं।फ़ंक्शन स्थिर वैरिएबल ब्रेक बाइनरी संगतता को जोड़ना/निकालना होगा?

वर्तमान में, मैं इन पंक्तियों

class Foo 
{ 
    void Bar() 
    { 
     static bool flag = true; 
    } 
} 

को हटाने जाएगा Foo की flag तोड़ दोहरी संगतता के साथ कुछ है?

के अलावा मेरा संकलक वर्तमान में वीसी 7.1 है यदि यह मायने रखता है।

+0

@downvoter - आप को समझाने के लिए परवाह है? –

उत्तर

0

नहीं। इसमें कोई बाहरी दृश्यता नहीं है।

2

static चर फ़ंक्शन के इंटरफ़ेस का हिस्सा नहीं है, इसलिए यह बाइनरी संगतता को प्रभावित नहीं करेगा। आपको अवगत होना चाहिए, कम से कम कोई नहीं, कि अगर यह कार्य वास्तव में इतना आसान है, तो यह उस मामले में रेखांकित किया गया हो सकता है जब तक कि आप सभी उपयोगकर्ताओं को दोबारा नहीं बनाते, आप ओडीआर तोड़ देंगे।

सरल सलाह: यदि संभव हो तो पुनः संयोजित करें। सुनिश्चित करें कि यदि संभव नहीं है तो मूल कोड में यह रेखांकित नहीं किया गया था।

1

यह इस अर्थ में बाइनरी संगतता को तोड़ता नहीं है कि कुछ क्रैश होने के लिए निश्चित है, या वह प्रोग्राम शुरू नहीं होगा।

हालांकि, अगर यह विधि कभी भी रेखांकित हो जाती है, तो यह कार्यक्षमता तोड़ सकती है। इनलाइन संस्करण अभी भी उस स्थिर चर का उपयोग करेंगे, और फिर नई हेडर फ़ाइल के विरुद्ध बनाए गए कोड उन विधियों का उत्पादन करेंगे जो स्थैतिक चर का उपयोग नहीं करते हैं। यह कोड पर निर्भर करता है यदि यह कोई समस्या है या नहीं, लेकिन अक्सर यह स्थिर चर (जिसे पुन: संकलित कोड द्वारा उपयोग नहीं किया जाएगा) शायद मस्ती के लिए नहीं था, और न ही प्रतिस्थापन है (जिसका उपयोग नहीं किया जाएगा पुरानी रेखांकित कोड द्वारा)।

सबक: यदि आप लाइब्रेरी हेडर संशोधन के बाद सब कुछ के पुनर्मूल्यांकन से बचना चाहते हैं, तो शीर्षलेख फ़ाइलों में किसी भी कोड से स्थैतिक चर का उपयोग न करें, या कुछ भी करें जो आप बदलना चाहते हैं। मान लें कि हेडर फ़ाइलों में सभी कोड इनलाइन हो सकते हैं।

संबंधित प्रश्न: static variables in an inlined function

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