मूल सी भाषा लूप प्रारंभिकरणों में प्रारंभिक घोषणाओं का समर्थन क्यों नहीं करती?प्री-सी 99 सी के लिए तर्क लूप के लिए शुरुआती घोषणा नहीं है?
जाहिर है मूल निर्माता, और फिर पूर्व-सी 99 मानकीकरण, इस तरह से निर्दिष्ट नहीं किया था। लेकिन मुझे के लिए कोई भी तर्क नहीं मिल रहा है कि डिज़ाइन पसंद किया गया था।
मुझे लगता है कि एक उत्तर के लिए सबसे नज़दीकी चीज है this answer यह बताते हुए कि मिश्रित घोषणाओं और कोड को कैसे प्रतिबंधित किया गया था ताकि संकलकों को एकल-पास वापस होने की अनुमति दी जा सके। पहली नज़र में यह समझ में आता है कि लूप स्टेटमेंट में घोषणाओं में कोड के साथ मिश्रित घोषणाओं के समान/समान समस्याएं होंगी।
लेकिन, पूर्व C99 सी किया ब्लॉक के शुरू में समर्थन घोषणाओं:
{
unsigned int i;
for(i = 0; i < WHATEVER; i += 1)
{
/* ... */
}
}
मैं व्यक्तिगत रूप से नहीं देखते हैं कैसे उस के लिए संकलक तर्क इस बात के लिए की तुलना में काफी अलग है:
for(unsigned int i = 0; i < WHATEVER; i += 1)
{
/* ... */
}
मुझे लगता है कि यदि एक कंपाइलर पूर्व सिंगल पास कर सकता है, तो यह बाद वाले भी कर सकता है। इसकी आवश्यकता हो सकती है कि for
कथन हमेशा एक स्कोप ब्लॉक बनाएं (भले ही केवल एक कथन के बाद और { ... }
बयानों के ब्लॉक न हों), लेकिन मैं इस तरह के अर्थशास्त्र के किसी अन्य प्री-सी 99 को तोड़ने का कोई तरीका नहीं सोच सकता सी कोड (या तो कथन के बाद एक ब्लॉक द्वारा पीछा किया जाता है, जिस स्थिति में यह पहले से ही "स्कॉप्ड" है, या उसके बाद एक ही कथन है, इस मामले में वैसे भी एक ही घोषणा में एक नई घोषणा की अनुमति नहीं दी जाएगी)।
तो, यह वाक्यविन्यास "फीचर" शुरू में क्यों छोड़ा गया था? क्या मैं सोच रहा हूं कि उस समय के प्रदर्शन लक्ष्यों का उल्लंघन किए बिना समर्थन करना मुश्किल होगा? उस समय ज्ञात भाषा पार्सर/कंपाइलर तकनीकें इसे कठिन लगती हैं? क्या यह कम से कम डिजाइन/मानसिकता के कारण छोड़ दिया गया था, क्योंकि कार्यात्मक रूप से एक ही चीज़ करना संभव था (लूप के लिए चारों ओर ब्लॉक)? या इसके खिलाफ एक स्पष्ट भाषा डिजाइन कारण था (उदाहरण के लिए शुरुआत में अपवादों को कैसे छोड़ दिया गया क्योंकि डिजाइनरों ने सोचा था कि एक बेहतर भाषा के लिए बनाया गया है)?
मैं कहाँ देखा है
- मैं इस यहाँ करने के लिए और सामान्य वेब खोज फू के माध्यम से उत्तर ढूंढना की कोशिश की है, कोई भाग्य के साथ: सभी खोज शब्द मैं के बारे में सोचा उलझन के साथ संतृप्त हो रहे हैं लूप प्रारंभिक घोषणाओं के लिए सी के बारे में प्रश्न, "सी 99 मोड के बाहर इस्तेमाल किया गया" त्रुटि संदेश, आदि (खोज शब्द "तर्क" को छोड़कर, जिसने मुझे उपयोगी जानकारी के लिए निर्देशित किया, लेकिन कुछ भी जो इसका उत्तर नहीं दिया गया)।
- मैंने डेनिस रिची द्वारा खुद को भाषा विकसित करने पर this article पर खोज की, और कुछ भी नहीं देखा।
- मैंने सी प्रोग्रामिंग भाषा (द्वितीय संस्करण) की अपनी प्रतिलिपि के माध्यम से खोज की, पहले लूप समझाते हुए अनुभाग के लिए वास्तविक पढ़ना, फिर "लूप" के लिए "के लिए"/"के अन्य उल्लेखों के लिए इंडेक्स की जांच करना। मैंने कुछ अन्य स्थानों पर पढ़ा है जो मैंने सोचा था कि इसका उल्लेख हो सकता है, लेकिन कुछ भी नहीं मिला।
सी 99 से पहले, सी ने आपको ब्लॉक की शुरुआत को छोड़कर चर परिभाषित करने की अनुमति नहीं दी। 'For' लूप के नियंत्रण भाग में परिभाषित चर एक ब्लॉक की शुरुआत में नहीं थे, इसलिए कोई उम्मीद नहीं थी कि उन्हें समर्थित किया जाएगा। सी ++ ने दोनों अवधारणाओं को प्रस्तुत किया (ब्लॉक में कहीं भी वैरिएबल परिभाषित करें, और 'for' loo के नियंत्रण भाग में परिभाषित चर) - और सी 99 ने उन्हें भी जोड़ा। –
एकमात्र लोग जो इसका उत्तर दे सकते हैं वे लेखक हैं, कोई और अनुमान लगाएगा। इन प्रकार के प्रश्नों को ऑफ-विषय माना जाता है। – cimmanon
@ जोनाथन लेफ्लर मैंने आपकी टिप्पणी को ऊपर उठाया। क्या आपको लगता है कि यह वर्तमान में दिए गए उत्तर में बेहतर होगा? यह "विशेषताओं को जोड़ने तक नहीं है जब तक प्रोग्रामर कुछ नहीं करने से रोक दिए जाते हैं" उत्तर में विचार, लेकिन समस्या को देखने का थोड़ा अलग तरीका कैप्चर करता है। – mtraceur