बहिष्करण चेतावनियों को लागू करने का एक तरीका है बहिष्कृत कार्यों को कॉल पर चेतावनियां देना, जब तक कि आप बहिष्कृत संदर्भ से कॉल नहीं कर रहे हों। इस तरह विरासत कोड चेतावनी उत्पन्न किए बिना विरासत कोड को कॉल कर सकता है जो केवल शोर की मात्रा है।मैं जीसीसी में बहिष्कृत कार्यों में बहिष्कृत चेतावनियों से कैसे छुटकारा पा सकता हूं?
यह सोचने की एक उचित रेखा है, और यह ओएस एक्स पर जीसीसी 4.2 (1) और क्लैंग 4.0 (2) के साथ-साथ उबंटू पर क्लैंग 3.0 (3) में लागू कार्यान्वयन में दिखाई देता है।
- (1): i686-सेब के darwin11-LLVM-जी ++ - 4.2 (जीसीसी) 4.2.1 (5658 निर्माण पर एप्पल इंक के आधार) (LLVM निर्माण 2336.11.00)
- (2): ऐप्पल क्लैंग संस्करण 4.0 (टैग/ऐप्पल/क्लैंग -421.0.57) (एलएलवीएम 3.1 एसवीएनएन पर आधारित)
- (3): उबंटू क्लैंग संस्करण 3.0-6ubuntu3 (टैग/RELEASE_30/अंतिम) (एलएलवीएम 3.0 पर आधारित)
हालांकि
, जब मैं जीसीसी 4.6 के साथ deprecat के सभी आमंत्रण के लिए (4) Ubuntu पर, मैं पदावनत हो चेतावनी संकलन संदर्भ के स्वतंत्र रूप से एड फ़ंक्शन। क्या यह कार्यक्षमता में एक प्रतिगमन है? क्या अन्य व्यवहार प्राप्त करने के लिए मैं संकलक विकल्प का उपयोग कर सकता हूं?
- (4): जी ++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
उदाहरण कार्यक्रम: जीसीसी 4.2 से
int __attribute__((deprecated)) a() {
return 10;
}
int __attribute__((deprecated)) b() {
return a() * 2; //< I want to get rid of warnings from this line
}
int main() {
return b(); //< I expect a warning on this line only
}
आउटपुट (हाँ, मुझे दो बार एक ही चेतावनी मिलती है। मुझे इसकी परवाह नहीं है, हालांकि):
main.cpp: In function ‘int main()’:
main.cpp:10: warning: ‘b’ is deprecated (declared at main.cpp:5)
main.cpp:10: warning: ‘b’ is deprecated (declared at main.cpp:5)
जीसीसी 4.6 से
आउटपुट:
main.cpp: In function 'int b()':
main.cpp:6:9: warning: 'int a()' is deprecated (declared at main.cpp:1) [-Wdeprecated-declarations]
main.cpp:6:11: warning: 'int a()' is deprecated (declared at main.cpp:1) [-Wdeprecated-declarations]
main.cpp: In function 'int main()':
main.cpp:10:9: warning: 'int b()' is deprecated (declared at main.cpp:5) [-Wdeprecated-declarations]
main.cpp:10:11: warning: 'int b()' is deprecated (declared at main.cpp:5) [-Wdeprecated-declarations]
मैं कैसे जीसीसी 4.6 समझा सकते हैं कि यह मुझे जीसीसी 4.2 के रूप में ही उत्पादन देना चाहिए? जीसीसी 4.6 और उच्चतर में यह केवल काम करता है:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
int __attribute__((deprecated)) b() {
return a() * 2; //< I want to get rid of warnings from this line
}
#pragma GCC diagnostic pop
नोट:
यह पूरी तरह से संभव है कि यह कभी भी एफएसएफ जीसीसी के साथ काम नहीं करता है, कि 4.2 व्यवहार जो आप देख रहे हैं वह जीसीसी को एक ऐप्पल पैच है। क्या आपके पास एफएसएफ जीसीसी 4.2 जांचने के लिए कहीं भी स्थापित किया गया है? – hvd
@ एचवीडी आप सही हैं। मैं उस परीक्षा को देखना चाहता हूं, लेकिन मेरे पास 4.2 हाथ नहीं है:/ –