Stroustrup के सी ++ प्रोग्रामिंग भाषा में एक चर आरंभ: विशेष संस्करण (3 एड), Stroustrup लिखते हैं कि घोषणा और नियंत्रण बयानों की सशर्त में चर का प्रारंभ न केवल है अनुमति दी, लेकिन प्रोत्साहित किया। वह लिखता है कि वह इसे प्रोत्साहित करता है क्योंकि यह चर के दायरे को केवल उस दायरे में कम कर देता है जिसके लिए उन्हें आवश्यकता होती है। तो इस तरह कुछ ...घोषणा और सी में एक सशर्त या नियंत्रण बयान ++
if ((int i = read(socket)) < 0) {
// handle error
}
else if (i > 0) {
// handle input
}
else {
return true;
}
... अच्छी प्रोग्रामिंग शैली और अभ्यास है। परिवर्तनीय i
केवल if
बयान के ब्लॉक के लिए मौजूद है जिसके लिए इसकी आवश्यकता है और फिर दायरे से बाहर हो जाता है।
हालांकि, प्रोग्रामिंग भाषा की यह विशेषता g ++ (संस्करण 4.3.3 उबंटू विशिष्ट संकलन) द्वारा समर्थित प्रतीत नहीं होती है, जो मेरे लिए आश्चर्यजनक है। शायद मैं सिर्फ एक झंडा के साथ जी ++ को बुला रहा हूं जो इसे बंद कर देता है (मैंने जो झंडे बुलाए हैं वे -g
और -Wall
हैं)। ++ निम्नलिखित संकलन त्रुटि देता है जब उन झंडे के साथ संकलन जी का मेरा संस्करण:
socket.cpp:130: error: expected primary-expression before ‘int’
socket.cpp:130: error: expected `)' before ‘int’
आगे अनुसंधान पर मुझे पता चला कि मैं एक संकलक है कि इस का समर्थन नहीं करता साथ केवल एक ही होने के लिए नहीं मालूम था। और this question में कुछ भ्रम प्रतीत होता था कि वास्तव में भाषा में सिंटैक्स मानक क्या था और इसके साथ संकलक किस संकलन करते थे।
तो सवाल यह है कि, कौन से कंपाइलर्स इस सुविधा का समर्थन करते हैं और संकलन के लिए किस झंडे को सेट करने की आवश्यकता है? क्या यह कुछ मानकों में होने का मुद्दा है, न कि दूसरों में?
इसके अलावा, जिज्ञासा से बाहर, क्या लोग आमतौर पर स्ट्रॉस्ट्रप से सहमत होते हैं कि यह अच्छी शैली है? या यह एक ऐसी स्थिति है जहां किसी भाषा के निर्माता को उसके सिर में एक विचार मिलता है जिसे आवश्यक रूप से भाषा के समुदाय द्वारा समर्थित नहीं किया जाता है?
मुझे नहीं पता कि किस कंपाइलर का समर्थन है, लेकिन मैं व्यक्तिगत रूप से इस दृष्टिकोण का उपयोग करता हूं जब भी मैं ऐसा कुछ करता हूं जिसे चरम चर के रूप में उपयोग करने से परे चर की आवश्यकता नहीं होती है। वही सवाल हालांकि, क्या यह बुरा अभ्यास है? – Chezz
एक और उदाहरण: http://stackoverflow.com/questions/1380135/can-you-evaluate-a-constructor-call-to-boolean-with-an-overloaded-bool/1380364#1380364 –
मैं तर्क दूंगा कि पूरा ब्लॉक द्वारा स्कॉइंग वैरिएबल का विचार खराब अभ्यास है क्योंकि यह लंबी विधियों से बहस करता है। मैं बॉब मार्टिन के कट्टरपंथी दावों की सिफारिश करता हूं कि उनकी बेहद सहायक पुस्तक * स्वच्छ कोड * में लंबाई कार्य करें; विशेष रूप से, एक विधि वास्तव में एक से अधिक नियंत्रण संरचना नहीं होनी चाहिए। –