Escape sequences in C
એસ્કેપ સિક્વન્સનો ઉપયોગ પ્રોગ્રામિંગ ભાષાઓ સી અને સી + + માં થાય છે, અને તેમની ડિઝાઇનની જાવા, પીએચપી, સી #વગેરે જેવી અન્ય ઘણી ભાષાઓમાં નકલ કરવામાં આવી હતી. એસ્કેપ સિક્વન્સ એ અક્ષરોની એક શ્રેણી છે જે અક્ષર અથવા શબ્દમાળાની અંદર ઉપયોગમાં લેવાતી વખતે પોતાને રજૂ કરતી નથી, પરંતુ અન્ય અક્ષર અથવા અક્ષરોની શ્રેણીમાં અનુવાદિત થાય છે જે સીધી રીતે રજૂ કરવું મુશ્કેલ અથવા અશક્ય હોઈ શકે છે. સીમાં, તમામ એસ્કેપ સિક્વન્સમાં બે અથવા વધુ અક્ષરો હોય છે, જેમાંથી પ્રથમ બેકસ્લેશ છે, (જેને "એસ્કેપ કેરેક્ટર" કહેવાય છે); બાકીના અક્ષરો એસ્કેપ સિક્વન્સનું અર્થઘટન નક્કી કરે છે. ઉદાહરણ તરીકે, એક એસ્કેપ ક્રમ છે જે નવી લાઇનના અક્ષરને સૂચવે છે. પ્રેરણા ધારો કે આપણે એક પંક્તિ પર છાપવા માંગીએ છીએ, પછીની પંક્તિ પર છાપવા માંગીએ છીએ. છાપવા માટેની શબ્દમાળાને નીચે પ્રમાણે એક જ શાબ્દિક તરીકે રજૂ કરવાનો પ્રયાસ કરી શકાય છેઃ #include <stdio.h> પૂર્ણાંક મુખ્ય () {પ્રિન્ટએફ ("હેલો, વિશ્વ! "); રીટર્ન 0;} આ C માં માન્ય નથી, કારણ કે શબ્દમાળા શાબ્દિક બહુવિધ તાર્કિક સ્રોત રેખાઓ સુધી વિસ્તરેલી નથી. આ નવા અક્ષરને તેના આંકડાકીય મૂલ્ય (ASCII માં), #include <stdio.h> પૂર્ણાંક મુખ્ય () {પ્રિન્ટએફ ("હેલો,% સીવર્લ્ડ! ", 0x0A); રીટર્ન 0;} આ પ્રોગ્રામને છાપવા માટે સૂચના આપે છે, ત્યારબાદ બાઈટ જેનું સંખ્યાત્મક મૂલ્ય છે, તે પછી આવે છે. જ્યારે મશીન ASCII એન્કોડિંગનો ઉપયોગ કરે છે ત્યારે આ ખરેખર કામ કરશે, તે અન્ય એન્કોડિંગનો ઉપયોગ કરતી સિસ્ટમો પર કામ કરશે નહીં, જે નવી લાઇનના અક્ષર માટે અલગ આંકડાકીય મૂલ્ય ધરાવે છે. તે એક સારો ઉકેલ પણ નથી કારણ કે તે હજુ પણ શાબ્દિક અંદર નવી રેખાના અક્ષરને રજૂ કરવાની મંજૂરી આપતું નથી, અને તેના બદલે પ્રિન્ટએફના શબ્દાર્થનો લાભ લે છે. આ સમસ્યાઓને ઉકેલવા અને સિસ્ટમો વચ્ચે મહત્તમ પોર્ટેબિલિટી સુનિશ્ચિત કરવા માટે, સી શાબ્દિક અંદર એક નવી લાઇન અક્ષર તરીકે અર્થઘટન કરે છે, જે લક્ષ્ય સિસ્ટમ પર ગમે તે હોઈ શકે છેઃ #include <stdio.h> પૂર્ણાંક મુખ્ય () {પ્રિન્ટએફ ("હેલો, \nવર્લ્ડ! "); રીટર્ન 0;} આ કોડમાં, એસ્કેપ ક્રમ અક્ષર દ્વારા અનુસરવામાં આવતા બેકસ્લેશ માટે નથી, કારણ કે બેકસ્લેશ કમ્પાઇલર દ્વારા અક્ષરોના અર્થઘટનની સામાન્ય રીતથી" એસ્કેપ "નું કારણ બને છે. બેકસ્લેશ જોયા પછી, કમ્પાઇલર અન્ય પાત્રની અપેક્ષા રાખે છે કે તે એસ્કેપ સિક્વન્સ પૂર્ણ કરે, અને પછી એસ્કેપ સિક્વન્સને તે રજૂ કરવાના હેતુવાળા બાઇટ્સમાં અનુવાદિત કરે છે. આમ, તે અંદર અથવા બીજે ક્યાંય વપરાય છે કે કેમ તે ધ્યાનમાં લીધા વિના, એમ્બેડેડ નવી લાઇન સાથેની સ્ટ્રિંગને રજૂ કરે છે. આ શાબ્દિક અંદર વાસ્તવિક બેકસ્લેશનું પ્રતિનિધિત્વ કેવી રીતે કરવું તે મુદ્દો ઉઠાવે છે. આ એસ્કેપ ક્રમનો ઉપયોગ કરીને કરવામાં આવે છે, જે આગળના વિભાગમાં જોવા મળે છે. કેટલીક ભાષાઓમાં એસ્કેપ સિક્વન્સ નથી, ઉદાહરણ તરીકે પાસ્કલ. તેના બદલે નવી લાઇન સહિત આદેશનો ઉપયોગ કરવામાં આવશે (નવી લાઇનનો સમાવેશ કરે છે, તેને બાકાત રાખે છે). લેખન ('હેલો'); લખો ('વિશ્વ! '); એસ્કેપ સિક્વન્સની કોષ્ટક નીચેના એસ્કેપ સિક્વન્સને પ્રમાણભૂત સીમાં વ્યાખ્યાયિત કરવામાં આવ્યા છે. આ કોષ્ટક એ. એસ. સી. આઈ. આઈ. માં નકશા કરેલા મૂલ્યો પણ દર્શાવે છે. જો કે, આ એસ્કેપ સિક્વન્સનો ઉપયોગ સી કમ્પાઇલર સાથેની કોઈપણ સિસ્ટમ પર થઈ શકે છે, અને જો સિસ્ટમ ASCII પર આધારિત અક્ષર એન્કોડિંગનો ઉપયોગ ન કરે તો તે વિવિધ મૂલ્યો સાથે મેપ કરી શકે છે. નોંધ 1.Common બિન-માનક કોડ; નીચે નોંધો વિભાગ જુઓ. નોંધ 2.There એક, બે અથવા ત્રણ ઓક્ટલ અંકો n હાજર હોઈ શકે છે; નીચેનો નોંધો વિભાગ જુઓ. નોંધ 3. \u 4 ષટ્કોણ અંકો h લે છે; નીચેનો નોંધો વિભાગ જુઓ. નોંધ 4. \U 8 હેક્સાડેસિમલ અંકો h લે છે; નીચેનો નોંધો વિભાગ જુઓ. ડી. ઓ. એસ./વિન્ડોઝ સી. આર. એલ. એફ. ક્રમ જેવી નવી લાઇનને દર્શાવવા માટે પ્લેટફોર્મ એક કરતાં વધુ બાઈટનો ઉપયોગ કરી શકે છે તે હકીકત હોવા છતાં નોટ્સ એક બાઈટ ઉત્પન્ન કરે છે. ડી. ઓ. એસ. અને વિન્ડોઝ પરનું ભાષાંતર ત્યારે થાય છે જ્યારે બાઈટ ફાઇલ અથવા કન્સોલ પર લખવામાં આવે છે, અને જ્યારે ટેક્સ્ટ ફાઇલો વાંચવામાં આવે છે ત્યારે વ્યસ્ત ભાષાંતર કરવામાં આવે છે. હેક્સ એસ્કેપ ક્રમમાં ઓછામાં ઓછો એક હેક્સ અંક હોવો આવશ્યક છે, જેમાં કોઈ ઉપલા બાઉન્ડ નથી; તે જેટલા હેક્સ અંકો છે તેટલા માટે ચાલુ રહે છે. આમ, ઉદાહરણ તરીકે, આંકડાકીય મૂલ્ય ABCDEF16 સાથે બાઈટને સૂચવે છે, ત્યારબાદ અક્ષર આવે છે, જે હેક્સ અંક નથી. જો કે, જો પરિણામી પૂર્ણાંક મૂલ્ય એક બાઈટમાં ફિટ થવા માટે ખૂબ મોટું હોય, તો સોંપેલ વાસ્તવિક આંકડાકીય મૂલ્ય અમલીકરણ-નિર્ધારિત છે. મોટાભાગના પ્લેટફોર્મ્સમાં 8-બીટ પ્રકારો હોય છે, જે ઉપયોગી હેક્સ એસ્કેપ ક્રમને બે હેક્સ અંકો સુધી મર્યાદિત કરે છે. જો કે, બે હેક્સ અંકો કરતાં લાંબા હેક્સ એસ્કેપ સિક્વન્સ વાઈડ કેરેક્ટર અથવા વાઈડ સ્ટ્રિંગ લિટરલ (L સાથે પ્રિફિક્સ કરેલ) ની અંદર ઉપયોગી હોઈ શકે છેઃ ચાર s1 [] = "\x12";// સિંગલ ચાર મૂલ્ય સાથે 0x12 (દશાંશમાં 18) ચાર s1 [] = "\x1234";// સિંગલ ચાર અમલીકરણ-નિર્ધારિત મૂલ્ય સાથે, જ્યાં સુધી ચાર પૂરતું લાંબુ ન હોય Wchar _ t s2 [] = L "\x1234";// સિંગલ Wchar _ t મૂલ્ય 0x1234 સાથે, જો Wchar _ t પૂરતું લાંબુ હોય (16 બિટ્સ પૂરતા) તો ઓક્ટલ એસ્કેપ સિક્વન્સમાં એક, બે અથવા ત્રણ ઓક્ટલ અંકોનો સમાવેશ થાય છે. ઓક્ટલ એસ્કેપ ક્રમ ત્યારે સમાપ્ત થાય છે જ્યારે તેમાં પહેલેથી જ ત્રણ ઓક્ટલ અંકો હોય અથવા પછીનું અક્ષર ઓક્ટલ અંક ન હોય. ઉદાહરણ તરીકે, એક ઓક્ટલ એસ્કેપ ક્રમ છે જે અંક દ્વારા અનુસરવામાં આવતા એસ્કેપ ક્રમને બદલે આંકડાકીય મૂલ્ય 9 (ઓક્ટલમાં 11) સાથે બાઈટને સૂચવે છે. જો કે, તે ઓક્ટલ એસ્કેપ ક્રમ છે જે અંક દ્વારા અનુસરવામાં આવે છે. સંખ્યાત્મક મૂલ્ય 1 સાથે બાઈટને દર્શાવવા માટે, પછી અંકનો ઉપયોગ કરી શકાય છે, કારણ કે C આપમેળે અડીને આવેલા શબ્દમાળા અક્ષરોને સાંકળે છે. નોંધ લો કે કેટલાક ત્રણ આંકડાના ઓક્ટલ એસ્કેપ સિક્વન્સ એક જ બાઈટમાં ફિટ થવા માટે ખૂબ મોટા હોઈ શકે છે; આ વાસ્તવમાં ઉત્પાદિત બાઈટ માટે અમલીકરણ-નિર્ધારિત મૂલ્યમાં પરિણમે છે. એસ્કેપ ક્રમ એ સામાન્ય રીતે ઉપયોગમાં લેવાતો ઓક્ટલ એસ્કેપ ક્રમ છે, જે શૂન્ય મૂલ્ય સાથે નલ અક્ષરને સૂચવે છે. નોન-સ્ટાન્ડર્ડ એસ્કેપ સિક્વન્સ એ સી સ્ટાન્ડર્ડ અનુસાર માન્ય એસ્કેપ સિક્વન્સ નથી કારણ કે તે ઉપરના કોષ્ટકમાં જોવા મળતો નથી. સી સ્ટાન્ડર્ડ માટે આવા "અમાન્ય" એસ્કેપ સિક્વન્સનું નિદાન કરવાની જરૂર છે (એટલે કે, કમ્પાઇલરે ભૂલ સંદેશ છાપવો આવશ્યક છે). આ હકીકત હોવા છતાં, કેટલાક કમ્પાઇલર્સ અમલીકરણ-નિર્ધારિત શબ્દાર્થ સાથે વધારાના એસ્કેપ સિક્વન્સને વ્યાખ્યાયિત કરી શકે છે. એક ઉદાહરણ એ એસ્કેપ ક્રમ છે, જે ASCII માં હેક્સાડેસિમલ મૂલ્ય તરીકે 1B ધરાવે છે, એસ્કેપ અક્ષરને રજૂ કરે છે, અને GCC, ક્લાંગ અને TCC માં સપોર્ટેડ છે. જોકે તેને સી પ્રમાણભૂત સંગ્રહમાં ઉમેરવામાં આવ્યું ન હતું, કારણ કે તે કેટલાક પાત્ર સમૂહો (જેમ કે EBCDIC) માં કોઈ અર્થપૂર્ણ સમકક્ષ નથી. C99 ધોરણમાંથી, C એ એસ્કેપ સિક્વન્સને પણ ટેકો આપ્યો છે જે સ્ટ્રિંગ લિટરલ્સમાં યુનિકોડ કોડ પોઇન્ટ્સને સૂચવે છે. આવા એસ્કેપ સિક્વન્સને સાર્વત્રિક અક્ષર નામો કહેવામાં આવે છે, અને તેનું સ્વરૂપ અથવા હોય છે, જે હેક્સ ડિજિટ માટે વપરાય છે. ગણવામાં આવતા અન્ય એસ્કેપ સિક્વન્સથી વિપરીત, સાર્વત્રિક અક્ષરનું નામ એક કરતાં વધુ કોડ યુનિટમાં વિસ્તૃત થઈ શકે છે. આ ક્રમ કોડ બિંદુને સૂચવે છે, જેને હેક્સાડેસિમલ સંખ્યા તરીકે અર્થઘટન કરવામાં આવે છે. આ ક્રમ કોડ બિંદુને સૂચવે છે, જેને હેક્સાડેસિમલ સંખ્યા તરીકે અર્થઘટન કરવામાં આવે છે. (તેથી, યુ + 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 સાથે મહત્ત્વની વાત એ છે કે, સાર્વત્રિક અક્ષરનું નામ હંમેશા અક્ષર "એ" ને સૂચવે છે, પછી ભલેને તેનો ઉપયોગ કયા પ્રકારની શબ્દમાળામાં થાય અથવા ઉપયોગમાં એન્કોડિંગ હોય. ઓક્ટલ અને હેક્સ એસ્કેપ સિક્વન્સ હંમેશા એન્કોડિંગને ધ્યાનમાં લીધા વિના આંકડાકીય મૂલ્યોના ચોક્કસ સિક્વન્સને સૂચવે છે. તેથી, સાર્વત્રિક અક્ષર નામો ઓક્ટલ અને હેક્સ એસ્કેપ સિક્વન્સના પૂરક છે; જ્યારે ઓક્ટલ અને હેક્સ એસ્કેપ સિક્વન્સ કોડ એકમોનું પ્રતિનિધિત્વ કરે છે, સાર્વત્રિક અક્ષર નામો કોડ પોઇન્ટનું પ્રતિનિધિત્વ કરે છે, જેને "તાર્કિક" અક્ષરો તરીકે માનવામાં આવે છે. આ પણ જુઓ એસ્કેપ ક્રમ ડિગ્રાફ સંદર્ભો વધુ વાંચન ISO/IEC 9899:1999, પ્રોગ્રામિંગ ભાષાઓ-C C (પ્રોગ્રામિંગ ભાષા) નિયંત્રણ અક્ષરો