12

जब आप चेतावनी स्तर के साथ दृश्य स्टूडियो 2010 में निम्नलिखित सी ++ स्रोत फ़ाइल संकलन/W4 सक्षमदृश्य स्टूडियो 2010 (C++): दबाने C4706 अस्थायी रूप से चेतावनी

#include <cstdio> // for printf 
#include <cstring> // for strcmp 

char str0[] = "Hello"; 
char str1[] = "World"; 

int main() 
{ 
    int result; 

    if (result = strcmp(str0, str1)) // line 11 
    { 
     printf("Strings are different\n"); 
    } 
} 

आप निम्नलिखित चेतावनी मिलती है

C4706 चेतावनी: लाइन के लिए सशर्त अभिव्यक्ति

भीतर काम 11.

मैं इस जगह पर इस चेतावनी को ठीक से दबा देना चाहता हूं। निम्नलिखित http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx

तो मैं करने के लिए कोड बदल गया है - उम्मीद कर इस समस्या का समाधान होगा:: तो मैं गूगल की कोशिश की और यह पेज पाया

#include <cstdio> // for printf 
#include <cstring> // for strcmp 

char str0[] = "Hello"; 
char str1[] = "World"; 

int main() 
{ 
    int result; 

#pragma warning(push) 
#pragma warning(disable : 4706) 
    if (result = strcmp(str0, str1)) 
#pragma warning(pop) 
    { 
     printf("Strings are different\n"); 
    } 
} 

यह मदद नहीं की।

इस प्रकार या तो मदद नहीं:

#include <cstdio> // for printf 
#include <cstring> // for strcmp 

char str0[] = "Hello"; 
char str1[] = "World"; 

int main() 
{ 
    int result; 

#pragma warning(push) 
#pragma warning(disable : 4706) 
    if (result = strcmp(str0, str1)) 
    { 
#pragma warning(pop) 
     printf("Strings are different\n"); 
    } 
} 

एक और जांच से बचने के लिए: मैं प्रत्येक संकलन से पहले समाधान की सफाई की। तो यह शायद गलती नहीं है।

तो निष्कर्ष में: मैं इस जगह पर सी 4706 को कैसे दबा सकता हूं?

संपादित हाँ, नए सिरे से लिखना संभव है - लेकिन मैं सच में जानना क्यों तरह से मैं चेतावनी (कि MSDN पर आधिकारिक तौर पर दर्ज है) काम नहीं करता है दबाने की कोशिश चाहते हैं - जहां गलती है?

उत्तर

14

MSDN libray में: http://msdn.microsoft.com/en-us/library/2c8f766e(v=VS.100).aspx, वहाँ खंड इस प्रकार है।

रेंज 4700-4999 में चेतावनी संख्या है, जो लोगों को कोड पीढ़ी के साथ जुड़े रहे हैं के लिए, प्रभाव में चेतावनी के राज्य जब संकलक का सामना करना पड़ता एक समारोह के खुले घुंघराले ब्रेस प्रभाव में हो जाएगा बाकी समारोह के लिए। में चेतावनी प्रज्ञा का उपयोग करना 46 9 की तुलना में बड़ी संख्या में की चेतावनी की स्थिति को बदलने के लिए फ़ंक्शन केवल फ़ंक्शन के अंत के बाद प्रभावी होगा। उदाहरण के बाद पर चेतावनी प्रागमाओं का सही प्लेसमेंट दिखाता है कोड कोडिंग चेतावनी संदेश अक्षम करें, और फिर इसे पुनर्स्थापित करने के लिए।

तो '#pragma चेतावनी' केवल प्रत्येक कार्य/विधि के लिए काम करता है।

कृपया अधिक जानकारी के लिए निम्नलिखित कोड देखें।

#include <cstdio> // for printf 
#include <cstring> // for strcmp 

char str0[] = "Hello"; 
char str1[] = "World"; 

#pragma warning(push) 
#pragma warning(disable : 4706) 
void func() 
{ 
    int result; 
    if (result = strcmp(str0, str1)) // No warning 
    { 
     printf("Strings are different\n"); 
    } 
#pragma warning(pop) 
} 

int main() 
{ 
    int result; 

    if (result = strcmp(str0, str1)) // 4706 Warning. 
    { 
     printf("Strings are different\n"); 
    } 
} 
8

समझदार समाधान

if((result = strcmp(str0, str1)) != 0) 

जो किसी भी सी संकलक कि तुम सच में आवंटित करने के लिए, और लगभग एक ही वस्तु कोड उत्पन्न करने के लिए निश्चित है चाहते हैं सूचित करेंगे करने के लिए शर्त के पुनर्लेखन के लिए है।

+2

सबसे compilers कोष्ठक की एक अतिरिक्त जोड़ी की आवश्यकता द्वारा "क्या आप सुनिश्चित हैं" कारक लागू, मैं MSVC भी ऐसा ही पाती। – Thomas

19

अपनी चेतावनी छिपाने की कोशिश करने के बजाय, the issue it's complaining about को ठीक करें; आपके असाइनमेंट में एक मान (असाइनमेंट के बाईं ओर मान) है जिसे कानूनी रूप से किसी अन्य अभिव्यक्ति में उपयोग किया जा सकता है।

आप स्पष्ट रूप से काम का परिणाम परीक्षण करके इसे ठीक कर सकते हैं:

if ((result = strcmp(str0, str1)) != 0) 
{ 
    printf("Strings are different\n"); 
} 
+0

मुझे विश्वास नहीं है कि मैंने इसके बारे में नहीं सोचा था। धन्यवाद! सबसे अच्छा समाधान Def। –

1

एक सरल निर्माण !!bool करने के लिए एक प्रकार कास्ट करने के लिए नहीं है। इस तरह:

if (!!(result = strcmp(str0, str1))) 

हालांकि, कुछ मामलों में प्रत्यक्ष तुलना != 0 एक पाठक को और अधिक स्पष्ट हो सकता है।

2

एक और समाधान है जो चेतावनी से बचाता है: comma operator

यहां मुख्य लाभ यह होगा कि आपको कोष्ठक की आवश्यकता नहीं है, इसलिए जब आपका चर नाम छोटा हो तो !=0 समाधान से थोड़ा छोटा है।

उदाहरण के लिए:

if (result = strcmp(str0, str1), result) 
{ 
    printf("Strings are different\n"); 
} 
संबंधित मुद्दे