2013-09-30 8 views
12

मैं एक होमवर्क असाइनमेंट के लिए एक सी फाइल पर काम कर रहा हूँ और मैंने सोचा कि अगर मैं दिखाई तो जैसे अपने जवाब बना यह कक्षा के छात्रों मदद कर सकता है:सी में बहु-पंक्ति टिप्पणी चेतावनियों का क्या अर्थ है?

//**********|ANSWER|************\\ 
//blah blah blah, answering the 
//questions, etc etc 

और जब जीसीसी के साथ संकलन में पाया गया कि उन बैकस्लैश वर्ण पहली पंक्ति का अंत "बहु-पंक्ति टिप्पणी" चेतावनी को ट्रिगर करना प्रतीत होता था। जब मैंने उन्हें हटा दिया, चेतावनी गायब हो गई। तो मेरे सवाल दोहरा है:

क) कैसे वास्तव में बैकस्लैश वर्ण यह एक "बहु लाइन टिप्पणी" बनाने की उपस्थिति, और
ख) क्यों एक बहु पंक्ति टिपण्णी एक समस्या वैसे भी होगा करता है?

+2

पीछे की संख्या अप्रासंगिक है। आखिरी वाला "न्यूलाइन से बच रहा है" (और इस प्रकार [अब बहु-पंक्ति] टिप्पणी जारी है) - यह सीपीपी स्तर पर होता है। 'Blah blah "के सामने से' // 'निकालें (पीछे की ओर \ या दो पर छोड़ें) और कार्यक्रम को पहले जैसा ही चेतावनी के साथ संकलित करना चाहिए। – user2246674

+0

आह, समझ में आता है। धन्यवाद। – superexcellent12

उत्तर

17

सी (1 999 के मानक के बाद) में दो प्रकार की टिप्पणियां हैं।

पुरानी शैली की टिप्पणियां /* द्वारा पेश की गई हैं और */ द्वारा समाप्त की गई हैं, और एक रेखा, एक पूर्ण रेखा या एकाधिक रेखाओं का एक हिस्सा फैल सकती हैं।

सी ++ - शैली टिप्पणियां // द्वारा पेश की जाती हैं और लाइन के अंत तक समाप्त होती हैं।

लेकिन लाइन के अंत में एक बैकस्लैश उस पंक्ति को विभाजित अगली पंक्ति में ले जाती है। तो आप कानूनी रूप से // के साथ एक टिप्पणी पेश कर सकते हैं, लाइन के अंत में बैकस्लैश डाल सकते हैं, और टिप्पणी को कई भौतिक लाइनों (लेकिन केवल एक तार्किक लाइन) तक फैलाने का कारण बनता है।

आप अपनी पहली पंक्ति पर क्या कर रहे हैं यही कारण है कि: हालांकि भी है कि संभावित है

//**********|ANSWER|************// 

:

//**********|ANSWER|************\\ 

बस पंक्ति के अंत में बैकस्लैश के अलावा कुछ का उपयोग, उदाहरण के लिए भ्रामक, क्योंकि यह लगभग पुरानी शैली /* .. */ टिप्पणी की तरह दिखता है।

/////////// |ANSWER| //////////// 

या:: आप एक छोटे से सरल कुछ पर विचार हो सकता

/**********|ANSWER|************/ 
0

रूप में अच्छी तरह यह नीचे लाइन टिप्पणी करेंगे कि। आपको लगता है कि एक चेतावनी के बिना एक पंक्ति में सभी की कोशिश

/* // Bla \\ */ 
5

संकलक बस आपको बताता है कि आप अनजाने में पिछली टिप्पणी लाइन समाप्त होने से टिप्पणी की बाहर हो सकता है कोड की अगली पंक्ति \ साथ है, जो करना चाहते हैं तो सी में एक लाइन निरंतरता चरित्र यह दूसरी पंक्ति को पहले के साथ संयोजित करने का कारण बनता है। यह बदले में // टिप्पणी मूल रूप से दोनों मूल पंक्तियों पर टिप्पणी करने के लिए बनाता है। आपके मामले में यह कोई समस्या नहीं है, क्योंकि अगली पंक्ति एक टिप्पणी भी है।

लेकिन अगर अगली पंक्ति एक टिप्पणी होने का इरादा नहीं थी, तो हो सकता है कि आप "अजीब व्यवहार" के साथ समाप्त हो जाएं: किसी भी स्पष्ट कारण के लिए दूसरी पंक्ति को अनदेखा करने वाला कंपाइलर। स्थिति अक्सर इस तथ्य से जटिल होती है कि कुछ वाक्यविन्यास-हाइलाइटिंग कोड संपादक इस स्थिति का पता नहीं लगाते हैं और अगली पंक्ति को टिप्पणी के रूप में हाइलाइट करने में विफल रहते हैं।

आम तौर पर, इस विशिष्ट कारण के लिए, \ चरित्र को कोड स्तर के रूप में दुरुपयोग करना एक अच्छा विचार नहीं है। इसका उपयोग केवल तभी करें जब आपको वास्तव में करना है, यानी अगर आप वास्तव में कई लाइनों को एक में सिलाई करना चाहते हैं।

2

क) कैसे वास्तव में बैकस्लैश वर्ण की उपस्थिति यह एक "बहु लाइन टिप्पणी" पड़ता है, और

एक लाइन पर पिछले चरित्र के रूप में एक बैकस्लैश मतलब यह है कि संकलक उपेक्षा करना चाहिए बैकस्लैश और न्यूलाइन कैरेक्टर - यह संकलक को टिप्पणियों की जांच करने से पहले ऐसा करने के लिए कहता है। तो यह कहना है कि टिप्पणियों को हटाने से पहले यह प्रभावी रूप से

//**********|ANSWER|************\//blah blah blah, answering the 
//questions, etc etc 

पर गौर करना चाहिए कि अब यह शुरू में // देखता है और) लाइन के बाकी

ख क्यों एक बहु पंक्ति टिपण्णी होगा पर ध्यान नहीं देता वैसे भी एक समस्या है?

आपके उदाहरण में यह दूसरी पंक्ति के बाद से कोई टिप्पणी नहीं है, लेकिन यदि आपने दूसरी पंक्ति पर कुछ उपयोगी लिखा है तो क्या होगा?

ठीक है जब आपने सवाल पूछा "ए" यह संभावना है कि आपको यह नहीं पता था कि संकलक इस तरह से व्यवहार करता है, और यदि आपको एहसास नहीं है कि आपने कोड की एक पंक्ति पर टिप्पणी की है, तो यह काफी अच्छा है आपको चेतावनी देने के लिए संकलक।

एक और कारण यह है कि यहां तक ​​कि अगर यह ज्ञात होता है कि आम तौर पर एक संपादक दृश्यमान रूप से सफेद जगह नहीं दिखाएगा और इसलिए यह याद रखना आसान है कि बैकस्लैश लाइन पर अंतिम चरित्र हो सकता है या नहीं। उदाहरण के लिए:

int i = 42; 

// backslash+space: \ 
i++ 
// backslash and no space: \ 
i-- 
printf("%d\n", i); 

43 में परिणाम होगा क्योंकि i-- बाहर टिप्पणी की है, लेकिन i++ (क्योंकि बैकस्लैश लाइन पर अंतिम वर्ण नहीं है, लेकिन एक जगह है) नहीं है।

1

कोई नहीं कहा, लेकिन यह गूगल में शीर्ष जवाब

दबा है, इसलिए, इस विशिष्ट चेतावनी -Wno-comment विकल्प के साथ किया जा सकता है।

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