2015-09-10 9 views
7

सी/सी ++ कोड मैं बंदरगाह करने की कोशिश में के लिए, किसी बहिष्कृत सिस्टम हैडर शामिल है:अक्षम #warning सिर्फ एक हैडर

#ifdef __GNUC__ 
#warning "this header is deprecated" 
#endif 

हम gcc -Wall -Werror के साथ यहाँ संकलन के रूप में:

हैडर से

संकलन बंद हो जाता है। लंबे समय तक, बहिष्कृत कार्यों के उपयोग को प्रतिस्थापित करना सबसे अच्छा है, लेकिन अभी के लिए मैं केवल इस चेतावनी को अक्षम करना चाहता हूं।

पाठ्यक्रम के काम के -Werror के बिना संकलन, लेकिन चूंकि यह पूरी तरह से स्वचालित निर्माण प्रक्रिया का हिस्सा है, इसलिए मैं ऐसा नहीं करना पसंद करता हूं।

#undef आईएन __GNUC__ के साथ हेडर समेत इसे बाद में एक संभावना है, लेकिन मैं शामिल हेडर के अंदर दुष्प्रभावों से चिंतित हूं।

क्या #warning अक्षम करने या -Werror को केवल एक शीर्षलेख के लिए अक्षम करने का कोई तरीका है?

+2

"सी/सी ++ कोड" जैसी कोई चीज़ नहीं है। –

+1

एक कारण है कि चीजें बहिष्कृत हो जाती हैं। समस्या के चारों ओर अपना रास्ता हैक करने की कोशिश करने के बजाय, समस्या को खत्म करें और बहिष्कृत शीर्षलेख का उपयोग करना बंद करें। यदि उन्होंने हेडर को बहिष्कृत किया है, तो निश्चित रूप से आपके लक्ष्यों को पूरा करने के लिए एक बेहतर, अधिक आधुनिक तरीका है। – Elkvis

+0

@ लाइटनेसरेसेसिन ऑर्बिट: यह सी और सी ++ कोड का मिश्रण है। –

उत्तर

8

आप एक (जीसीसी विशिष्ट) diagnostic pragma

साथ ऐसा कर सकते तो आपको निम्न यह #warning की वजह से कोई चेतावनी को निष्क्रिय कर देगा के साथ शामिल चारों ओर हैं।

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 
#include "header.h" 
#pragma GCC diagnostic pop 

नोट अगर आप संकलक ऊपर में warning करने के लिए ignored बदल अभी भी चेतावनी प्रिंट कि - यह सिर्फ उनके लिए -Werror झंडे पर कार्य नहीं करता।

2

इस चेतावनी की ठीक एक प्रकार, #warning निर्देश अक्षम करता है, तो मुझे लगता है यह इस समस्या का सबसे सुरक्षित समाधान है:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-W#warnings" 
#include <evilheader.h> 
#pragma GCC diagnostic pop 

(संपादित: जीसीसी वास्तव में पर बजना है क्षमा करें, पता चला है मेरी सिस्टम, इसलिए आपके वास्तविक जीसीसी के साथ काम नहीं कर सकता)

+0

मैंने अभी जीसीसी 4.7.2 के साथ कोशिश की और ऐसा लगता है कि यह एक क्लैंग विशिष्ट विशेषता है जिसे मैं डरता हूं। –

+0

@ सिमोन गिबन्स हाँ। यह अजीब बात है कि कैसे क्लैंग जीसीसी का अनुकरण करता है (उदाहरण के लिए 'प्राग्मा जीसीसी डायग्नोस्टिक') लेकिन यह जीसीसी से बेहतर है :) – mojuba

+1

भले ही यह वास्तविक जीसीसी के साथ काम न करे, क्योंकि मेरा जीसीसी वास्तव में भी घिरा हुआ है। – JeremyP

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