2010-03-25 5 views
12

किसी कारण से मेरे विजुअल स्टूडियो 2008 ने कोड के लिए चेतावनियां दिखाना शुरू किया: "int main (int argc, char ** argv)", जो वास्तव में कष्टप्रद है।विजुअल स्टूडियो 2008 में चेतावनी C4100 से निपटने के लिए कैसे करें

विस्तृत चेतावनी ouputs (आप लाइन नंबर अनदेखा कर सकते हैं) कर रहे हैं:
1> \ main.cpp (86):। 'Argv': C4100 चेतावनी। Unreferenced औपचारिक पैरामीटर
1> \ main.cpp (86): चेतावनी C4100: 'argc': अप्रतिबंधित औपचारिक पैरामीटर

मुझे आश्चर्य है कि विजुअल स्टूडियो 2008 में सेटिंग्स हैं जो गलती से बदल दी गई हैं। या मुझे इस चेतावनी से कैसे निपटना चाहिए?

उत्तर

18

मापदंडों unreferenced हैं, तो आप उन्हें अज्ञात छोड़ सकते हैं:

int main(int, char**) 
{ 
} 
बजाय

int main(int argc, char** argv) 
{ 
} 

आप वास्तव में सिर्फ चेतावनी को दबाने के लिए चाहते हैं, आप ऐसा /wd4100 आदेश का उपयोग कर सकते हैं कंपाइलर के लिए लाइन विकल्प या अपने कोड में #pragma warning(disable: 4100) का उपयोग करना।

यह एक स्तर 4 चेतावनी है; यदि आप कम चेतावनी स्तर पर संकलित करते हैं, तो आपको यह चेतावनी नहीं मिलेगी। चेतावनी स्तर प्रोजेक्ट गुणों में सेट है (प्रोजेक्ट राइट-क्लिक करें, प्रॉपर्टी का चयन करें; कॉन्फ़िगरेशन गुणों पर -> सी ++ -> सामान्य, "चेतावनी स्तर" सेट करें)।

+0

क्या वीएस -2008 में कोई सेटिंग है जिसके साथ मैं खेल सकता हूं? क्योंकि मैंने पहले लिखे गए कोडों के लिए, यह सी 4100 चेतावनी दिखाती है कि मैं उन्हें संकलित करता हूं। धन्यवाद। – Jimmie

+0

@ जिमी: हाँ; आप अपनी परियोजना के लिए चेतावनी स्तर को कुछ कम चेतावनी स्तर (उदाहरण के लिए, स्तर 3) में बदल सकते हैं। –

+3

ध्यान दें कि फ़ंक्शन परिभाषा में अज्ञात पैरामीटर होने के कारण सी ++ में ठीक है, लेकिन यदि आपके सी के रूप में संकलित करना एक त्रुटि है (कभी-कभी कोड लिखने का प्रयास करते समय एक छोटी सी जलन जो किसी भी तरह से संकलित करती है)। –

4

चेतावनी C4100 चेतावनी स्तर 4 पर जारी किया गया है जो डिफ़ॉल्ट नहीं है, इसलिए किसी बिंदु पर किसी ने शायद इसे आपके प्रोजेक्ट के लिए बदल दिया है।

आप चेतावनी स्तर को वापस बदल सकते हैं, या चेतावनी को अधिक सीधे संबोधित कर सकते हैं।

James McNellis said के रूप में, आप पैरामीटर सूची से पैरामीटर नाम को हटाकर सी ++ में चेतावनी को चुप कर सकते हैं। हालांकि, अगर कोड सी कोड के रूप में संकलित किया जाएगा तो आपको उस मामले में एक त्रुटि मिलेगी।

विंडोज हेडर इस चेतावनी से निपटने में मदद के लिए मैक्रो UNREFERENCED_PARAMETER() को परिभाषित करता है। आप चेतावनी को चुप करने के लिए

UNREFERENCED_PARAMETER(argc); 
UNREFERENCED_PARAMETER(argv); 

का उपयोग कर सकते हैं। आप विंडोज हेडर शामिल नहीं करना चाहते हैं, तो मैक्रो बस एक कुछ नहीं कर अभिव्यक्ति में पैरामीटर नाम का एक प्रयोग के लिए विस्तारित:

#define UNREFERENCED_PARAMETER(P)   \ 
    /*lint -save -e527 -e530 */ \ 
    { \ 
     (P) = (P); \ 
    } \ 
    /*lint -restore */ 
+2

मुझे 'UNREFERENCED_PARAMETER' के बारे में पता नहीं था; यह जानकर अच्छा लगा। विंडोज हेडर में, दो संस्करण हैं। डिफ़ॉल्ट रूप से सक्षम एक बस '(पी) 'तक फैलता है। दूसरा, जिसे आप उद्धृत करते हैं, '(पी) = (पी);' तक फैलता है, और इसका उपयोग तब किया जाता है जब 'लिंट' परिभाषित किया गया हो; यह कॉन्स्ट-क्वालिफाइड या गैर-असाइन करने योग्य प्रकार के पैरामीटर के लिए असफल हो जाएगा। –

+0

@ जेम्स - अधिक 'जटिल' परिभाषा सिर्फ मेरी सीटीएजी कूदने के लिए भूमि पर हुई थी (मुझे थोड़ा सा स्क्रॉल करना चाहिए था - खासकर जब से मुझे आश्चर्य हुआ कि विस्तार सिर्फ '(पी)' नहीं था)। –

5

आप आदेश पंक्ति पैरामीटर तो अन्य मानक हस्ताक्षर का उपयोग नहीं कर रहे हैं मुख्य के लिए:

int main(); 
+0

अन्य मानक हस्ताक्षर उन ब्रैकेट्स के बीच शून्य है, है ना? – paxdiablo

+3

हां, सी में; सी ++ में कोई फर्क नहीं पड़ता क्योंकि वे बराबर हैं। प्रश्न सी ++ टैग किया गया था, इसलिए मैं कोई पैराम के रूप में नहीं गया जिसे मैं आम तौर पर सी ++ में उपयोग करता हूं। –

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