बहिष्कृत कार्यों के लिए लिंक-टाइम त्रुटि उत्पन्न करने का सबसे अच्छा तरीका है जिसे आप लोगों का उपयोग नहीं करना चाहते हैं यह सुनिश्चित करना है कि वंचित कार्य पुस्तकालयों में मौजूद नहीं हैं - जो उन्हें 'बहिष्कृत' से परे एक चरण बनाता है।
शायद आप इसमें सहायक कार्य के साथ सहायक पुस्तकालय प्रदान कर सकते हैं; जो लोग ध्यान नहीं देंगे वे सहायक पुस्तकालय से जुड़ सकते हैं, लेकिन मुख्यधारा के लोग सहायक लाइब्रेरी का उपयोग नहीं करेंगे और इसलिए कार्यों का उपयोग नहीं करेंगे। हालांकि, यह अभी भी इसे 'बहिष्कृत' चरण से परे ले जा रहा है।
लिंक-टाइम चेतावनी प्राप्त करना मुश्किल है। जाहिर है, जीसीसी कुछ फ़ंक्शन (mktemp()
एट अल) के लिए करता है, और यदि आप gets()
का उपयोग करने वाले प्रोग्राम को चलाते हैं तो ऐप्पल को GCC चेतावनी दी जाती है। मुझे नहीं पता कि ऐसा करने के लिए वे क्या करते हैं।
टिप्पणियों के प्रकाश में, मैं तुम्हें नहीं बल्कि कड़ी समय या चलाने के समय तक इंतजार कर से संकलन समय पर समस्या दूर सिर, की जरूरत है।
जीसीसी विशेषताओं में शामिल हैं (जीसीसी 4.4.1 मैनुअल से):
error ("message")
यह विशेषता एक समारोह घोषणा और इस तरह के एक समारोह के लिए एक कॉल पर प्रयोग किया जाता है मृत कोड के माध्यम से समाप्त नहीं किया है उन्मूलन या अन्य अनुकूलन, एक त्रुटि जिसमें संदेश शामिल होगा, का निदान किया जाएगा। यह संकलन समय के लिए उपयोगी है, विशेष रूप से __builtin_constant_p और इनलाइन फ़ंक्शंस के साथ, जहां इनलाइन फ़ंक्शन तर्कों की जांच बाहरी char [(condition) के माध्यम से संभव नहीं है? 1 1]; चाल। हालांकि फ़ंक्शन को छोड़ना संभव है और इस प्रकार एक विशेषता विफलता का आह्वान करते समय, इस विशेषता का उपयोग करते समय समस्या का निदान किया जाएगा और कॉल के सटीक स्थान के साथ भी इनलाइन फ़ंक्शंस या डीबगिंग जानकारी को उत्सर्जित नहीं करते समय भी निदान किया जाएगा।
warning ("message")
यह विशेषता एक समारोह घोषणा पर प्रयोग किया जाता है और इस तरह के एक समारोह के लिए एक कॉल मृत कोड उन्मूलन या अन्य अनुकूलन के माध्यम से समाप्त नहीं किया है, तो एक चेतावनी जो संदेश शामिल होंगे निदान किया जाएगा। यह संकलन समय के लिए उपयोगी है, विशेष रूप से __builtin_constant_p और इनलाइन फ़ंक्शंस के साथ। जबकि .gnu में किसी संदेश के साथ फ़ंक्शन को परिभाषित करना संभव है।चेतावनी * अनुभाग, इस विशेषता का उपयोग करते समय समस्या का निदान पहले और को इनलाइन फ़ंक्शंस की उपस्थिति में या डिबगिंग जानकारी उत्सर्जित करने पर भी कॉल के सटीक स्थान के साथ निदान किया जाएगा।
यदि कॉन्फ़िगरेशन प्रोग्राम त्रुटियों को अनदेखा करते हैं, तो वे बस टूटे हुए हैं। इसका मतलब है कि नए कोड को फ़ंक्शंस का उपयोग करके संकलित नहीं किया जा सकता है, लेकिन मौजूदा कोड पुस्तकालयों में बहिष्कृत कार्यों का उपयोग जारी रख सकता है (जब तक इसे पुन: संकलित करने की आवश्यकता न हो)।
चेतावनी '.gnu.warning' नोट के साथ किया जा सकता है पर प्रतिबद्ध है, लेकिन मैं त्रुटियों को उत्पन्न करने के लिए समकक्ष नहीं जानता। दुर्भाग्यवश, जबकि आपका समाधान सबसे अच्छा है, यह एक बहिष्कृत एबीआई और नए अनुप्रयोगों को जोड़ने के लिए मेरी ज़रूरतों को पूरा नहीं करता है। –
@ आर ..: पर्याप्त मेला। क्या यह कहना उचित है कि आप पुस्तकालयों की एक प्रति स्थापित करना चाहते हैं; आप चलाने के लिए जारी रखने के लिए पूर्व-संकलित ऐप्स (जो बहिष्कृत इंटरफ़ेस का उपयोग कर रहे हैं) चाहते हैं; आप नए संकलित ऐप्स चाहते हैं जो लिंक करने में विफल होने के लिए बहिष्कृत इंटरफ़ेस का उपयोग करते हैं? यदि ऐसा है, और यदि कॉन्फ़िगरेशन-डिटेक्टर बहिष्कृत कार्यों को खोजेंगे, तो आप लोगों को चीजों को ठीक करने की योजना कैसे बनाते हैं ताकि कोड आधुनिक (गैर-बहिष्कृत) इंटरफेस से जुड़ रहा हो? –
कोई नया प्रतिस्थापन इंटरफ़ेस नहीं है; इन बहिष्कृत इंटरफेस का उपयोग करने की कोशिश करना सिर्फ हानिकारक है, और सही व्यवहार उनका उपयोग नहीं करना है।दुर्भाग्यवश मेरे पास टूटे हुए सॉफ़्टवेयर पर नियंत्रण नहीं है जो उनका उपयोग करने का प्रयास कर रहा है, और जब मैं संभवतः रखरखावकर्ताओं को नए संस्करणों को ठीक करने के लिए प्राप्त कर सकता हूं, तो उपयोगकर्ता अभी भी पुराने संस्करणों को संकलित करने की कोशिश कर रहे हैं। –