2010-07-17 11 views
13

मुझे एक तृतीय-पक्ष लाइब्रेरी मिली है जो चेतावनी का एक टन उत्पन्न करती है, यहां तक ​​कि/W3 के तहत भी। क्या मेरे लिए कंपाइलर बताने का कोई तरीका है, "इस निर्देशिका से शामिल किसी भी फाइल के लिए C4244 अक्षम करें, या इसकी उपनिर्देशिका"? बेशक, मैं अपने कोडबेस में चेतावनी को अक्षम नहीं करना चाहता हूं, न ही मैं इसे हर संभव ट्रैक को ट्रैक करना चाहता हूं और #pragma warning(...क्या आप किसी विशिष्ट स्थान से शामिल किसी भी शीर्षलेख के लिए (विशिष्ट) कंपाइलर चेतावनियां बंद कर सकते हैं?

+1

अच्छा सवाल :) अगर मैं क्यूटी हेडर से चेतावनियां बंद कर सकता हूं तो मुझे खुशी होगी। –

+0

@ विजिटर: मुझे यकीन है कि मुझे नहीं पता कि आप किस बारे में बात कर रहे हैं। ;) – moswald

+0

मुझे यकीन नहीं है कि एक कंपाइलर ऐसा कर सकता है या नहीं। लेकिन व्यावहारिक रूप से, आप संकलन के बाद इन चेतावनियों को फ़िल्टर कर सकते हैं। – czchen

उत्तर

9

मैं यहाँ अपने खुद के सवाल का जवाब देने से नफरत को दबाने के लिए संकलक बताने के लिए है, लेकिन मुझे डर है कि इस मामले में 'सही' जवाब है कर रहा हूँ: यह है संभव नहीं।

+1

हां। मैंने पूर्व-प्रोसेसर का दुरुपयोग करने की भी कोशिश की है जिसमें एक असफल मैक्रो उत्पन्न किया गया है जो चेतावनियों को अक्षम करता है लेकिन यह भी संभव नहीं लगता है। कुछ समझदार आउटपुट होने का एकमात्र तरीका मुझे लगता है कि संकलक चेतावनी आउटपुट को grep करना है, लेकिन अभी के लिए मैं बस सभी चेतावनियों के साथ रह रहा हूं। –

+0

विजुअल स्टूडियो 2015 (कम से कम) में एक प्रोजेक्ट 'गुण/सभी विकल्प/विशिष्ट चेतावनियां अक्षम करें' सेट कर सकते हैं जिन्हें आप सेट कर सकते हैं। इसके लिए सीएलआई '/ wd4244' है। अन्य कंपाइलर्स में यह '/ nowarn: 4244' हो सकता है। –

3

मुझे यकीन नहीं है कि आप का मतलब है कि आप नहीं चाहते हैं #pragma निर्देशों के साथ अपने शामिल बयानों को लपेटने के लिए या सही निर्देश को ट्रैक करने में समय बिताना नहीं चाहते थे। यदि इसका उत्तरार्द्ध है, तो मैंने पहले किया है:

#ifdef _MSC_VER 
#pragma warning(disable : 4244) 
#endif 

#include "MyHeader.h" 

#ifdef _MSC_VER 
#pragma warning(default : 4244) /* Reset to default state */ 
#endif 
+0

क्षमा करें, यह पूर्व था। मुझे पता है कि पहले से ही #pragma के माध्यम से चेतावनियों को कैसे अक्षम किया जाए। – moswald

+0

यह काम करना चाहिए। संकलक चेतावनी प्रज्ञा को याद करता है जो कि जब यह घोषणा संकलित करता था तब प्रभावी था। –

+1

@ हंस: यह MyHeader.h द्वारा उत्पन्न चेतावनियों को बंद कर सकता है, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है। मैं कई दर्जन पुस्तकालयों के लिए कुछ सौ फाइलों को खोजना नहीं चाहता हूं, और फिर उन्हें #pragmas के साथ लपेटें। – moswald

3

आप अपने शामिल पथ से तृतीय पक्ष प्रोजेक्ट को हटाने का प्रयास कर सकते हैं। फिर एक उप-डीआईआर बनाएं जिसमें एक ही डीआईआर संरचना और हेडर फाइलें तृतीय पक्ष प्रोजेक्ट के रूप में हों, ताकि सभी # शामिल अब आपके हेडर ढूंढ सकें। फिर प्रत्येक नकली शीर्षलेख xxxx.h में आप प्रज्ञा सेट करते हैं तो वास्तविक xxxx.h शीर्षलेख शामिल करें, फिर प्रज्ञा को साफ़ करें। एक ही फ़ाइल सहित पुनरावर्ती से बचने के लिए आपको # शामिल करने के लिए एक अतिरिक्त डीआईआर जोड़ना होगा।

व्यक्तिगत रूप से, मैं बस अपनी परियोजना से गुजरता हूं और प्रगति जोड़ता हूं।

5

आप रख सकते हैं झंडे जैसे VS Project Settings > Command-line Options में /wd4600 विशिष्ट Complier Warnings

+8

यह उस हिस्से को याद करता है जिसके बारे में वह कहता है, "मैं अपने कोडबेस में चेतावनी को अक्षम नहीं करना चाहता हूं।" –

0

प्रयास करें:

//in wrapper_3rdParty.h 
#pragma once 

#pragma warning(push) 
#pragma warning(disable : 4244) 

#include "3rdParty.h" 

#pragma warning(pop) 
अपने कोड में

फिर, बस #include "wrapper_3rdParty.h" बजाय।

जो चेतावनी पर default व्यवहार के साथ समस्याओं को संभालता है, और htat पैकेज के आपके उपयोग के सभी उदाहरणों में चेतावनी दबाने वाली है।

+0

एक ही स्थान पर आपकी सभी टिप्पणियों का जवाब देने के लिए: लाइब्रेरी बड़ी थी, और मुझे इनमें से दर्जनों को लिखना होगा। मैं एक शॉर्टकट के बारे में पूछ रहा था। – moswald

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