5

मान लीजिए कि मैं एक बड़े कोड बेस पर काम कर रहा हूं जिसने डिफ़ॉल्ट रूप से w44101 को चेतावनी दी है। मतलब अगर मैं अपनी परियोजना में जाता हूं और गुणों पर दायाँ क्लिक करता हूं -> सी/सी ++ -> कमांड लाइन ->/w44101 अतिरिक्त विकल्प अनुभाग में दिखाई देता है।विजुअल स्टूडियो में अभिभावक से प्राप्त विशिष्ट चेतावनी को कैसे अक्षम करें?

मैं स्रोत कोड के बजाय कॉन्फ़िगरेशन को बदलकर इस चेतावनी को अक्षम करने में सक्षम होना चाहता हूं। मैंने गुणों में जाने की कोशिश की -> सी/सी ++ -> सभी विकल्प -> विशिष्ट चेतावनी अक्षम करें और 4101 में डालें, और यह वास्तव में गुणों में /wd"4101" -> सी/सी ++ -> कमांड लाइन का उत्पादन करता है। हालांकि, जब मैं अपनी परियोजना संकलित करता हूं, तब भी यह 4101 चेतावनी फेंकता है। /wd"4101" और /w44101 क्यों नहीं एक दूसरे को रद्द करें?

मैं विजुअल स्टूडियो 2015 के साथ विंडोज 10 पर हूं। इस चेतावनी को अक्षम करने का सही तरीका क्या है? यह बेहतर होगा अगर प्रस्तावित समाधानों को सीएमके में किसी प्रकार के फ़ंक्शन के साथ बुलाया जा सके क्योंकि .sln इस कोड बेस की फ़ाइल सीएमके द्वारा उत्पन्न की गई है।

संपादित करें: इस कोड बेस पर मैं काम कर रहा हूं डिफ़ॉल्ट रूप से एक सख्त संकलन ध्वज सेटअप है। यह /W4 और /WX के साथ संकलित है। इसके अलावा अतिरिक्त स्तर 4 चेतावनी, एक उदाहरण है, /w44101, /w44062, /w44191 आदि

+0

देखो। संकलन कमांड में दो में से कौन सा विकल्प आता है? यदि अभिभावक इसे कमांडलाइन अनुभाग में रखता है, तो आप शायद इसे कमांडलाइन अनुभाग में भी रखना चाहते हैं, न कि "विशिष्ट चेतावनियां अक्षम करें" खंड में। –

+0

@ एनएम। आप सही हैं ... यदि मैं मैन्युअल रूप से 'w44101' के बाद' wd4101' को अतिरिक्त विकल्पों में ले जाता हूं तो यह वास्तव में संकलित करता है। अब मुझे यह पता लगाना होगा कि सीएमके में ऐसा कैसे किया जाए। यदि आप जानते हैं तो कृपया उत्तर लिखने में संकोच न करें और मैं इसे स्वीकार करूंगा। – user3667089

+0

अपने 4101 बनाम 44101 विसंगतियों को ठीक करें। यदि आप अपने प्रश्न को ठीक नहीं कर सकते हैं, तो हम आपकी मदद करने में समय बर्बाद नहीं करना चाहते हैं क्योंकि आप साबित करते हैं कि आप हमारी टिप्पणियों को नहीं सुनते हैं। – Phil1970

उत्तर

7

अपने प्रश्न में, आप 44101 चेतावनी सक्षम कर रहे हैं (जो मौजूद नहीं है अगर मैं सही हूँ?) के रूप में कुछ नाम हैं, लेकिन चेतावनी को अक्षम करना 4101: क्या यह एक टाइपो है?

संपादित करें:

आप अपने प्रश्न की टिप्पणियों में यह जवाब दे दिया। MSDN documentation, /wlnnnn विकल्प nnnn द्वारा निर्दिष्ट चेतावनी संख्या के लिए l पर चेतावनी स्तर सेट करने की अनुमति देता है। तो /w44101 चेतावनी संख्या 4101 स्तर 4 पर सक्षम बनाता है।


वैसे भी, अगर अपनी परियोजनाओं CMake के साथ उत्पन्न कर रहे हैं, add_compile_options मौजूदा निर्देशिका में स्रोत फ़ाइलों का संकलन करने के लिए विकल्प जोड़ने के लिए इस्तेमाल किया जा सकता। यह "वैश्विक क्षेत्र" में चेतावनी 4101 सक्षम करने के लिए इस्तेमाल किया जा सकता:

add_compile_options(/w4101) 

फिर आप उसे निष्क्रिय करने target_compile_definitions उपयोग कर सकते हैं प्रति-लक्ष्य:

add_library(foo ...) 
target_compile_definitions(foo PUBLIC /wd4101) 

संपादित करें:

आपकी टिप्पणियों से, रेपो की मुख्य सीएमके फ़ाइल में है:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /w44101") 

और अपनी परियोजना में CMake फाइल करने का प्रयास:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4101") 

क्या करना चाहिए CMAKE_CXX_FLAGS से /w44101 हटा रहा है।आप कोई रिक्त स्ट्रिंग के साथ /w44101 को बदलने के लिए इस string(REPLACE ...) का उपयोग कर प्राप्त कर सकते हैं:

string(REPLACE "/w44101" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 

जाहिर है, सबसे अच्छा समाधान कोड चेतावनी पैदा ठीक करने के लिए किया जाएगा। 4101, अप्रयुक्त चर के बारे में है कि ठीक करने के लिए आसान है;)

(देखें संबंधित सवाल "How do I best silence a warning about unused variables?") वर्बोज़ निर्माण लॉग में

+0

4101 को एक उदाहरण के रूप में इस्तेमाल किया गया था क्योंकि इसे पुन: पेश करना आसान है। रेपो के मुख्य सीएमकेलिस्ट में 'सेट (CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS}/w44101") 'है, और मेरे प्रोजेक्ट में सीएमकेलिस्ट मैं'set (CMAKE_CXX_FLAGS" $ {CMAKE_CXX_FLAGS}/wd4101 ") करने का प्रयास करता हूं लेकिन यह नहीं हुआ काम नहीं करता मैंने उन्हें आपके 'add_compile_options' और 'target_compile_definitions' के साथ बदल दिया लेकिन अभी भी चेतावनी फेंक दी गई है। क्या यह आपके अंत में काम करता है? – user3667089

+0

@ user3667089 मैंने चेतावनियों को कभी भी अक्षम नहीं किया है, इसलिए मैंने इसका परीक्षण नहीं किया;) मैंने आपकी अतिरिक्त जानकारी के आधार पर एक अन्य प्रस्ताव के साथ अपना उत्तर संपादित किया। फिर, सबसे अच्छा समाधान कोड को ठीक करना होगा। चेतावनी अविश्वसनीय कोड इंगित कर सकती है और इसे त्रुटियों के रूप में माना जाना चाहिए – wasthishelpful

+0

मैंने 'सूची (REMOVE_ITEM CMAKE_CXX_FLAGS/w44101)' की कोशिश की लेकिन यह अभी भी मेरे लिए चेतावनी फेंक दिया। क्या यह आपके अंत में काम करता है? – user3667089

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