Escape sequences in C
एस्केप अनुक्रमों का उपयोग प्रोग्रामिंग भाषाओं सी और सी + + में किया जाता है, और उनके डिजाइन को कई अन्य भाषाओं जैसे जावा, पीएचपी, सी #, आदि में कॉपी किया गया था। एक पलायन अनुक्रम वर्णों का एक क्रम है जो एक चरित्र या स्ट्रिंग शाब्दिक के अंदर उपयोग किए जाने पर खुद का प्रतिनिधित्व नहीं करता है, लेकिन इसे किसी अन्य चरित्र या वर्णों के अनुक्रम में अनुवादित किया जाता है जिन्हें सीधे प्रतिनिधित्व करना मुश्किल या असंभव हो सकता है। सी में, सभी पलायन अनुक्रमों में दो या अधिक वर्ण होते हैं, जिनमें से पहला बैकस्लैश होता है, (जिसे "एस्केप चरित्र" कहा जाता है); शेष वर्ण पलायन अनुक्रम की व्याख्या निर्धारित करते हैं। उदाहरण के लिए, एक पलायन अनुक्रम है जो एक नई पंक्ति के वर्ण को दर्शाता है। प्रेरणा मान लीजिए कि हम एक पंक्ति पर प्रिंट आउट करना चाहते हैं, उसके बाद अगली पंक्ति पर। कोई भी स्ट्रिंग को एकल शाब्दिक के रूप में प्रस्तुत करने का प्रयास कर सकता हैः #include <stdio.h> int मुख्य () {प्रिंटएफ ("हैलो, दुनिया! "); रिटर्न 0;} यह सी में मान्य नहीं है, क्योंकि एक स्ट्रिंग शाब्दिक कई तार्किक स्रोत रेखाओं को नहीं फैला सकता है। इसे न्यूलाइन वर्ण को उसके संख्यात्मक मान (एएससीआईआई में), #include <stdio.h> इंट मेन () {प्रिंटएफ ("हैलो,% सीवर्ल्ड! ", 0x0A); रिटर्न 0;} यह प्रोग्राम को प्रिंट करने का निर्देश देता है, उसके बाद वह बाईट जिसका संख्यात्मक मान है, उसके बाद आता है। जबकि यह वास्तव में काम करेगा जब मशीन एएससीआईआई एन्कोडिंग का उपयोग करती है, यह उन प्रणालियों पर काम नहीं करेगा जो अन्य एन्कोडिंग का उपयोग करते हैं, जिनका नई पंक्ति के चरित्र के लिए एक अलग संख्यात्मक मूल्य है। यह एक अच्छा समाधान भी नहीं है क्योंकि यह अभी भी एक शाब्दिक के अंदर एक नई पंक्ति के चरित्र का प्रतिनिधित्व करने की अनुमति नहीं देता है, और इसके बजाय प्रिंटएफ के शब्दार्थ का लाभ उठाता है। इन समस्याओं को हल करने और प्रणालियों के बीच अधिकतम सुवाह्यता सुनिश्चित करने के लिए, सी एक शाब्दिक के अंदर एक नई पंक्ति के चरित्र के रूप में व्याख्या करता है, जो भी लक्ष्य प्रणाली पर हो सकता हैः #include <stdio.h> इंट मेन () {प्रिंटएफ ("हैलो, \nवर्ल्ड! "); रिटर्न 0;} इस कोड में, पलायन अनुक्रम पत्र के बाद एक बैकस्लैश के लिए खड़ा नहीं है, क्योंकि बैकस्लैश संकलक द्वारा वर्णों की व्याख्या के सामान्य तरीके से" पलायन "का कारण बनता है। बैकस्लैश को देखने के बाद, संकलक एक अन्य चरित्र से पलायन अनुक्रम को पूरा करने की उम्मीद करता है, और फिर पलायन अनुक्रम को उन बाइट्स में अनुवादित करता है जिनका वह प्रतिनिधित्व करने का इरादा रखता है। इस प्रकार, एक अंतःस्थापित नई रेखा के साथ एक स्ट्रिंग का प्रतिनिधित्व करता है, चाहे वह अंदर या कहीं और उपयोग किया गया हो। यह इस मुद्दे को उठाता है कि एक शाब्दिक के अंदर एक वास्तविक बैकस्लैश का प्रतिनिधित्व कैसे किया जाए। यह पलायन अनुक्रम का उपयोग करके किया जाता है, जैसा कि अगले खंड में देखा गया है। कुछ भाषाओं में पलायन अनुक्रम नहीं होते हैं, उदाहरण के लिए पास्कल। इसके बजाय एक नई लाइन सहित एक कमांड का उपयोग किया जाएगा (इसमें एक नई लाइन शामिल है, इसे शामिल नहीं किया गया है)। लिखें ('हैलो'); लिखें ('दुनिया! '); पलायन अनुक्रमों की तालिका निम्नलिखित पलायन अनुक्रमों को मानक सी में परिभाषित किया गया है। यह तालिका उन मूल्यों को भी दिखाती है जिन्हें वे एएससीआईआई में मानचित्रित करते हैं। हालाँकि, इन पलायन अनुक्रमों का उपयोग सी संकलक के साथ किसी भी प्रणाली पर किया जा सकता है, और यदि प्रणाली एएससीआईआई पर आधारित चरित्र एन्कोडिंग का उपयोग नहीं करती है तो विभिन्न मूल्यों को मैप किया जा सकता है। नोट 1.Common गैर-मानक कोड; नीचे नोट्स अनुभाग देखें। नोट 2.There एक, दो या तीन अष्टक अंक n मौजूद हो सकते हैं; नीचे दिए गए नोट्स अनुभाग को देखें। नोट 3. \u 4 हेक्साडेसिमल अंक लेता है; नीचे दिए गए नोट्स अनुभाग को देखें। नोट 4. \U 8 हेक्साडेसिमल अंक लेता है; नीचे दिए गए नोट्स अनुभाग को देखें। नोट्स एक बाइट का उत्पादन करता है, इस तथ्य के बावजूद कि प्लेटफॉर्म एक नई लाइन को दर्शाने के लिए एक से अधिक बाइट का उपयोग कर सकता है, जैसे कि डी. ओ. एस./विंडोज सी. आर. एल. एफ. अनुक्रम। डी. ओ. एस. और विंडोज पर से अनुवाद तब होता है जब बाइट को किसी फ़ाइल या कंसोल पर लिखा जाता है, और विपरीत अनुवाद तब किया जाता है जब पाठ फ़ाइलों को पढ़ा जाता है। एक हेक्स एस्केप अनुक्रम में कम से कम एक हेक्स अंक होना चाहिए, जिसमें कोई ऊपरी सीमा नहीं होनी चाहिए; यह उतने ही हेक्स अंकों के लिए जारी रहता है जितने हैं। इस प्रकार, उदाहरण के लिए, संख्यात्मक मान ABCDEF16 के साथ बाइट को दर्शाता है, जिसके बाद अक्षर होता है, जो एक हेक्स अंक नहीं है। हालाँकि, यदि परिणामी पूर्णांक मान एक ही बाइट में फिट होने के लिए बहुत बड़ा है, तो वास्तविक संख्यात्मक मान निर्धारित किया जाता है जो कार्यान्वयन-परिभाषित होता है। अधिकांश प्लेटफार्मों में 8-बिट प्रकार होते हैं, जो एक उपयोगी हेक्स एस्केप अनुक्रम को दो हेक्स अंकों तक सीमित करते हैं। हालांकि, दो हेक्स अंकों से लंबे हेक्स एस्केप अनुक्रम एक विस्तृत वर्ण या चौड़े स्ट्रिंग शाब्दिक (एल के साथ उपसर्ग) के अंदर उपयोगी हो सकते हैंः चार एस1 [] = "\x12";// एकल चार मूल्य के साथ 0x12 (दशमलव में 18) चार एस1 [] = "\x1234";// एकल चार कार्यान्वयन-परिभाषित मूल्य के साथ, जब तक कि चार पर्याप्त लंबा न हो डब्ल्यू. टी. एस. 2 [] = एल "\x1234";// एकल डब्ल्यू. सी. ए. आर. टी मूल्य 0x1234, बशर्ते डब्ल्यू. टी. काफी लंबा हो (16 बिट पर्याप्त) एक अष्टक एस्केप अनुक्रम में एक, दो, या तीन अष्टक अंक होते हैं। ऑक्टल एस्केप अनुक्रम तब समाप्त होता है जब इसमें या तो पहले से ही तीन ऑक्टल अंक होते हैं, या अगला वर्ण ऑक्टल अंक नहीं होता है। उदाहरण के लिए, एक एकल अष्टक पलायन अनुक्रम है जो अंक के बाद पलायन अनुक्रम के बजाय संख्यात्मक मान 9 (अष्टक में 11) के साथ एक बिट को दर्शाता है। हालाँकि, अंक के बाद ऑक्टल एस्केप अनुक्रम है। बिट को संख्यात्मक मान 1 के साथ निरूपित करने के लिए, उसके बाद अंक का उपयोग किया जा सकता है, क्योंकि सी स्वचालित रूप से आसन्न स्ट्रिंग अक्षरों को जोड़ता है। ध्यान दें कि कुछ तीन अंकों के ऑक्टल एस्केप अनुक्रम एक ही बाइट में फिट होने के लिए बहुत बड़े हो सकते हैं; इसके परिणामस्वरूप वास्तव में उत्पादित बाइट के लिए एक कार्यान्वयन-परिभाषित मूल्य होता है। पलायन अनुक्रम एक आम तौर पर उपयोग किया जाने वाला अष्टक पलायन अनुक्रम है, जो शून्य मूल्य के साथ शून्य वर्ण को दर्शाता है। गैर-मानक पलायन अनुक्रम सी मानक के अनुसार एक वैध पलायन अनुक्रम नहीं है क्योंकि यह उपरोक्त तालिका में नहीं पाया गया है। सी मानक के लिए इस तरह के "अमान्य" पलायन अनुक्रमों का निदान करने की आवश्यकता होती है (यानी, संकलक को एक त्रुटि संदेश छापना होगा)। इस तथ्य के बावजूद, कुछ संकलक कार्यान्वयन-परिभाषित शब्दार्थ के साथ अतिरिक्त पलायन अनुक्रमों को परिभाषित कर सकते हैं। एक उदाहरण पलायन अनुक्रम है, जिसमें ए. एस. सी. आई. आई. में हेक्साडेसिमल मान के रूप में 1 बी है, पलायन चरित्र का प्रतिनिधित्व करता है, और जी. सी. सी., क्लैंग और टी. सी. सी. में समर्थित है। हालाँकि इसे सी मानक प्रदर्शन सूची में नहीं जोड़ा गया था, क्योंकि कुछ चरित्र सेटों (जैसे ई. बी. सी. डी. आई. सी.) में इसका कोई सार्थक समकक्ष नहीं है। सार्वभौमिक वर्ण नाम सी99 मानक से, सी ने पलायन अनुक्रमों का भी समर्थन किया है जो स्ट्रिंग अक्षरों में यूनिकोड कोड बिंदुओं को दर्शाते हैं। इस तरह के पलायन अनुक्रमों को सार्वभौमिक चरित्र नाम कहा जाता है, और इसका रूप या होता है, जहां एक हेक्स अंक होता है। विचार किए गए अन्य पलायन अनुक्रमों के विपरीत, एक सार्वभौमिक चरित्र नाम एक से अधिक कोड इकाई में विस्तारित हो सकता है। अनुक्रम कोड बिंदु को दर्शाता है, जिसे हेक्साडेसिमल संख्या के रूप में व्याख्या की जाती है। अनुक्रम कोड बिंदु को दर्शाता है, जिसे हेक्साडेसिमल संख्या के रूप में व्याख्या की जाती है। (इसलिए, यू + 10000 या उससे अधिक पर स्थित कोड बिंदुओं को वाक्यविन्यास के साथ दर्शाया जाना चाहिए, जबकि निचले कोड बिंदु या का उपयोग कर सकते हैं।) लक्ष्य प्रणाली पर गंतव्य प्रकार के एन्कोडिंग में कोड बिंदु को कोड इकाइयों के अनुक्रम में परिवर्तित किया जाता है। उदाहरण के लिए (जहां एन्कोडिंग UTF-8, और UTF-16 के लिए है): चार s1 [] = "\xC0";// 0xC0 मान के साथ एक एकल बाईट, मान्य UTF-8 चार s2 [] = "\u00C0";// मान 0xC3,0x80 के साथ दो बाइट्स, U + 00C0 डब्ल्यूचर _ t s3 [] = L "\xC0" की UTF-8 एन्कोडिंग;// 0x00C0 डब्ल्यूचर _ t s4 = L "\u00C0" मान के साथ एक एकल डब्ल्यूचर _ t;// एक एकल डब्ल्यूचर _ t के साथ महत्वपूर्ण रूप से, सार्वभौमिक वर्ण नाम हमेशा वर्ण "ए" को दर्शाता है, भले ही इसका उपयोग किस प्रकार के स्ट्रिंग शाब्दिक में किया जाता है, या उपयोग में एन्कोडिंग। ऑक्टल और हेक्स एस्केप अनुक्रम हमेशा संख्यात्मक मूल्यों के कुछ अनुक्रमों को दर्शाते हैं, चाहे एन्कोडिंग कुछ भी हो। इसलिए, सार्वभौमिक वर्ण नाम ऑक्टल और हेक्स एस्केप अनुक्रमों के पूरक हैं; जबकि ऑक्टल और हेक्स एस्केप अनुक्रम कोड इकाइयों का प्रतिनिधित्व करते हैं, सार्वभौमिक वर्ण नाम कोड बिंदुओं का प्रतिनिधित्व करते हैं, जिन्हें "तार्किक" वर्णों के रूप में माना जा सकता है। यह भी देखें एस्केप अनुक्रम डिग्राफ संदर्भ आगे पढ़ने के लिए आईएसओ/आईईसी 9899:1999, प्रोग्रामिंग भाषाएँ-सी सी (प्रोग्रामिंग भाषा) नियंत्रण वर्ण