Escape sequences in C
এস্কেপ সিকোয়েন্সগুলি সি এবং সি + + প্রোগ্রামিং ভাষায় ব্যবহৃত হয় এবং তাদের নকশা জাভা, পিএইচপি, সি #ইত্যাদির মতো অন্যান্য অনেক ভাষায় অনুলিপি করা হয়েছিল। এস্কেপ সিকোয়েন্স হল অক্ষরের একটি ক্রম যা কোনও অক্ষর বা স্ট্রিংয়ের আক্ষরিক অভ্যন্তরে ব্যবহার করার সময় নিজেকে উপস্থাপন করে না, তবে অন্য কোনও অক্ষর বা অক্ষরের ক্রমতে অনুবাদ করা হয় যা সরাসরি উপস্থাপন করা কঠিন বা অসম্ভব হতে পারে। সি-তে, সমস্ত পালানোর ক্রম দুই বা ততোধিক অক্ষর নিয়ে গঠিত, যার মধ্যে প্রথমটি হল ব্যাকস্ল্যাশ, (যাকে "পালানোর চরিত্র" বলা হয়); অবশিষ্ট অক্ষরগুলি পালানোর ক্রমের ব্যাখ্যা নির্ধারণ করে। উদাহরণস্বরূপ, একটি পালানোর ক্রম যা একটি নতুন লাইনের অক্ষরকে নির্দেশ করে। অনুপ্রেরণা ধরুন আমরা একটি লাইনে প্রিন্ট আউট করতে চাই, তারপরে পরবর্তী লাইনে। প্রিন্ট করার জন্য স্ট্রিংটি নিম্নরূপ একক আক্ষরিক হিসাবে উপস্থাপন করার চেষ্টা করা যেতে পারেঃ #include <stdio.h> ইন্ট মেইন () {প্রিন্টএফ ("হ্যালো, ওয়ার্ল্ড! "); রিটার্ন 0;} এটি সি-তে বৈধ নয়, কারণ একটি স্ট্রিং আক্ষরিক একাধিক যৌক্তিক উৎস লাইন প্রসারিত করতে পারে না। নতুন লাইনের অক্ষরের সংখ্যাসূচক মান (এ. এস. সি. আই. আই-তে), <আই. ডি. 2> <<আই. ডি. 1>> আই. টি মেইন () {প্রিন্ট. এফ ("হ্যালো,% সিওয়ার্ল্ড! ", 0x0এ); রিটার্ন 0;} এটি প্রোগ্রামটিকে মুদ্রণ করার নির্দেশ দেয়, তারপরে বাইটের সংখ্যাগত মান অনুসরণ করে। যদিও এটি প্রকৃতপক্ষে কাজ করবে যখন মেশিনটি এ. এস. সি. আই. আই এনকোডিং ব্যবহার করবে, এটি অন্যান্য এনকোডিং ব্যবহার করে এমন সিস্টেমে কাজ করবে না, যার নতুন লাইনের অক্ষরের জন্য আলাদা সংখ্যাসূচক মান রয়েছে। এটি একটি ভাল সমাধানও নয় কারণ এটি এখনও একটি আক্ষরিক ভিতরে একটি নতুন লাইনের অক্ষরের প্রতিনিধিত্ব করার অনুমতি দেয় না এবং পরিবর্তে প্রিন্টএফ-এর শব্দার্থবিজ্ঞানের সুবিধা নেয়। এই সমস্যাগুলি সমাধান করার জন্য এবং সিস্টেমগুলির মধ্যে সর্বাধিক বহনযোগ্যতা নিশ্চিত করার জন্য, সি একটি আক্ষরিক ভিতরে একটি নতুন লাইনের অক্ষর হিসাবে ব্যাখ্যা করে, যা লক্ষ্য সিস্টেমে থাকতে পারেঃ #include <stdio.h> ইন্ট মেইন () {প্রিন্টএফ ("হ্যালো, \nওয়ার্ল্ড! "); রিটার্ন 0;} এই কোডে, এস্কেপ সিকোয়েন্সটি অক্ষরের পরে একটি ব্যাকস্ল্যাশকে বোঝায় না, কারণ ব্যাকস্ল্যাশটি কম্পাইলার দ্বারা অক্ষরগুলি ব্যাখ্যা করার স্বাভাবিক উপায় থেকে একটি" এস্কেপ "সৃষ্টি করে। ব্যাকস্ল্যাশ দেখার পর, কম্পাইলার আশা করে যে অন্য একটি অক্ষর পালানোর ক্রমটি সম্পূর্ণ করবে, এবং তারপর পালানোর ক্রমটিকে বাইটে অনুবাদ করে যা এটি প্রতিনিধিত্ব করার উদ্দেশ্যে করা হয়েছে। সুতরাং, এটি ভিতরে বা অন্য কোথাও ব্যবহার করা হোক না কেন, একটি এমবেডেড নতুন লাইন সহ একটি স্ট্রিংকে উপস্থাপন করে। এটি একটি আক্ষরিক ভিতরে একটি প্রকৃত ব্যাকস্ল্যাশকে কীভাবে উপস্থাপন করা যায় তা নিয়ে প্রশ্ন উত্থাপন করে। এটি পালানোর ক্রম ব্যবহার করে করা হয়, যা পরবর্তী বিভাগে দেখা যায়। কিছু ভাষায় পালানোর ক্রম নেই, উদাহরণস্বরূপ পাস্কাল। পরিবর্তে একটি নতুন লাইন সহ একটি কমান্ড ব্যবহার করা হবে (একটি নতুন লাইন অন্তর্ভুক্ত করে, এটি বাদ দেয়)। লিখুন ('হ্যালো'); লিখুন ('বিশ্ব! '); পালানোর ক্রমের সারণী নিম্নলিখিত পালানোর ক্রমগুলি স্ট্যান্ডার্ড সি-তে সংজ্ঞায়িত করা হয়েছে। এই টেবিলটি এ. এস. সি. আই. আই-তে তাদের মানগুলিও দেখায়। যাইহোক, এই এস্কেপ সিকোয়েন্সগুলি সি কম্পাইলার সহ যে কোনও সিস্টেমে ব্যবহার করা যেতে পারে এবং যদি সিস্টেমটি এ. এস. সি. আই. আই-এর উপর ভিত্তি করে একটি অক্ষর এনকোডিং ব্যবহার না করে তবে বিভিন্ন মানের মানচিত্র তৈরি করতে পারে। নোট 1.Common অ-মানক কোড; নীচের নোটস বিভাগটি দেখুন। নোট 2.There এক, দুই বা তিনটি অষ্টক সংখ্যা উপস্থিত থাকতে পারে; নীচের নোটস বিভাগটি দেখুন। নোট 3। \u 4টি হেক্সাডেসিমাল সংখ্যা h নেয়; নীচের নোট বিভাগটি দেখুন। নোট 4। \U 8টি হেক্সাডেসিমাল সংখ্যা h নেয়; নীচের নোট বিভাগটি দেখুন। নোটস একটি বাইট তৈরি করে, যদিও প্ল্যাটফর্মটি ডস/উইন্ডোজ সি. আর. এল. এফ সিকোয়েন্সের মতো একটি নতুন লাইন বোঝাতে একাধিক বাইট ব্যবহার করতে পারে। ডস এবং উইন্ডোজ থেকে অন-এ অনুবাদ ঘটে যখন বাইটটি কোনও ফাইল বা কনসোলে লেখা হয় এবং টেক্সট ফাইলগুলি পড়ার সময় বিপরীত অনুবাদ করা হয়। একটি হেক্স এস্কেপ সিকোয়েন্সের অবশ্যই কমপক্ষে একটি হেক্স ডিজিটের অনুসরণ থাকতে হবে, যার কোনও উপরের সীমা নেই; এটি যতগুলি হেক্স ডিজিটের জন্য অব্যাহত থাকে। সুতরাং, উদাহরণস্বরূপ, সংখ্যাসূচক মান ABCDEF16 সহ বাইটকে বোঝায়, তারপরে অক্ষরটি, যা একটি হেক্স ডিজিট নয়। যাইহোক, যদি ফলস্বরূপ পূর্ণসংখ্যার মানটি একটি বাইটে ফিট করার জন্য খুব বড় হয়, তবে নির্ধারিত প্রকৃত সংখ্যাসূচক মানটি বাস্তবায়ন-সংজ্ঞায়িত হয়। বেশিরভাগ প্ল্যাটফর্মের 8-বিট প্রকার রয়েছে, যা একটি দরকারী হেক্স এস্কেপ ক্রমকে দুটি হেক্স সংখ্যায় সীমাবদ্ধ করে। যাইহোক, দুটি হেক্স সংখ্যার চেয়ে দীর্ঘ হেক্স এস্কেপ সিকোয়েন্সগুলি একটি প্রশস্ত অক্ষর বা প্রশস্ত স্ট্রিং আক্ষরিকের মধ্যে কার্যকর হতে পারে (L এর সাথে উপসর্গযুক্ত): চার s1 [] = "\x12";// 0x12 মান সহ একক চার (দশমিক 18) চার s1 [] = "\x1234";// বাস্তবায়ন-সংজ্ঞায়িত মান সহ একক চার, যদি না চার যথেষ্ট দীর্ঘ না হয় ডাব্লুচার্টএস2 [] = এল "\x1234";// 0x1234 মান সহ একক ডাব্লুচার্ট, তবে ডাব্লুচার্ট যথেষ্ট দীর্ঘ (16 বিট যথেষ্ট) একটি অষ্টক এস্কেপ সিকোয়েন্স এক, দুই, বা তিনটি অষ্টক সংখ্যা দ্বারা অনুসরণ করে গঠিত। অষ্টক পালানোর ক্রমটি শেষ হয় যখন এতে ইতিমধ্যে তিনটি অষ্টক সংখ্যা থাকে, অথবা পরবর্তী অক্ষরটি একটি অষ্টক সংখ্যা নয়। উদাহরণস্বরূপ, একটি একক অষ্টক পালানোর ক্রম যা অঙ্কের পরে পালানোর ক্রমের পরিবর্তে সংখ্যাসূচক মান 9 (অষ্টকে 11) সহ একটি বাইটকে নির্দেশ করে। যাইহোক, অঙ্কের পরে অষ্টক পালানোর ক্রম। সংখ্যাসূচক মান 1 সহ বাইটকে বোঝানোর জন্য, তারপরে অঙ্কটি ব্যবহার করা যেতে পারে, যেহেতু সি স্বয়ংক্রিয়ভাবে সংলগ্ন স্ট্রিং অক্ষরগুলিকে একত্রিত করে। মনে রাখবেন যে কিছু তিন-সংখ্যার অষ্টক পালানোর ক্রম একটি একক বাইটে ফিট করার জন্য খুব বড় হতে পারে; এর ফলে প্রকৃতপক্ষে উত্পাদিত বাইটের জন্য একটি বাস্তবায়ন-সংজ্ঞায়িত মান পাওয়া যায়। পালানোর ক্রম হল একটি সাধারণভাবে ব্যবহৃত অষ্টক পালানোর ক্রম, যা শূন্য মান সহ নাল অক্ষরকে বোঝায়। নন-স্ট্যান্ডার্ড এস্কেপ সিকোয়েন্স সি স্ট্যান্ডার্ড অনুসারে একটি বৈধ এস্কেপ সিকোয়েন্স নয় কারণ এটি উপরের টেবিলে পাওয়া যায় না। সি স্ট্যান্ডার্ডের জন্য এই ধরনের "অবৈধ" পালানোর ক্রম নির্ণয় করা প্রয়োজন (অর্থাৎ, সংকলককে অবশ্যই একটি ত্রুটি বার্তা মুদ্রণ করতে হবে)। এই সত্যটি সত্ত্বেও, কিছু সংকলক বাস্তবায়ন-সংজ্ঞায়িত শব্দার্থবিদ্যা সহ অতিরিক্ত পালানোর ক্রমগুলি সংজ্ঞায়িত করতে পারে। একটি উদাহরণ হল এস্কেপ সিকোয়েন্স, যার এ. এস. সি. আই. আই-তে হেক্সাডেসিমাল মান হিসাবে 1বি রয়েছে, যা এস্কেপ চরিত্রের প্রতিনিধিত্ব করে এবং জিসিসি, ক্ল্যাং এবং টিসিসি-তে সমর্থিত। তবে এটি সি স্ট্যান্ডার্ড সংগ্রহে যোগ করা হয়নি, কারণ কিছু চরিত্রের সেটগুলিতে (যেমন ইবিসিডিআইসি) এর কোনও অর্থবহ সমতুল্য নেই। সর্বজনীন অক্ষরের নাম সি99 মান থেকে, সি এমন এস্কেপ সিকোয়েন্সগুলিকেও সমর্থন করেছে যা স্ট্রিং আক্ষরিকগুলিতে ইউনিকোড কোড পয়েন্টগুলিকে নির্দেশ করে। এই ধরনের পালানোর ক্রমগুলিকে সর্বজনীন অক্ষরের নাম বলা হয় এবং এর ফর্ম বা, যেখানে একটি হেক্স ডিজিটকে বোঝায়। বিবেচিত অন্যান্য পালানোর ক্রমের বিপরীতে, একটি সর্বজনীন অক্ষরের নাম একাধিক কোড ইউনিটে প্রসারিত হতে পারে। ক্রমটি কোড পয়েন্টকে নির্দেশ করে, যা একটি হেক্সাডেসিমাল সংখ্যা হিসাবে ব্যাখ্যা করা হয়। ক্রমটি কোড পয়েন্টকে নির্দেশ করে, যা একটি হেক্সাডেসিমাল সংখ্যা হিসাবে ব্যাখ্যা করা হয়। (অতএব, U + 10000 বা তার উপরে অবস্থিত কোড পয়েন্টগুলি অবশ্যই বাক্যবিন্যাসের সাথে চিহ্নিত করা উচিত, যেখানে নিম্ন কোড পয়েন্টগুলি বা ব্যবহার করতে পারে।) টার্গেট সিস্টেমে গন্তব্য প্রকারের এনকোডিংয়ে কোড পয়েন্টটি কোড ইউনিটের একটি ক্রমে রূপান্তরিত হয়। উদাহরণস্বরূপ (যেখানে এনকোডিং হল UTF-8, এবং UTF-16 এর জন্য): চর s1 [] = "\xC0";// 0xC0 মান সহ একটি একক বাইট, বৈধ নয় UTF-8 চর s2 [] = "\u00C0";// 0xC3,0x80 মান সহ দুটি বাইট, U + 00C0 ডাব্লুচার্টএস3 [] = L "\xC0" এর UTF-8 এনকোডিং;// 0x00C0 ডাব্লুচার্টএস4 = L "\u00C0" মান সহ একটি একক ডাব্লুচার্ট গুরুত্বপূর্ণভাবে, সর্বজনীন অক্ষরের নামটি সর্বদা "এ" অক্ষরকে বোঝায়, এটি যে ধরনের স্ট্রিং আক্ষরিক ব্যবহার করা হয় বা ব্যবহৃত এনকোডিং নির্বিশেষে। অকটাল এবং হেক্স এস্কেপ সিকোয়েন্সগুলি সর্বদা এনকোডিং নির্বিশেষে সংখ্যাসূচক মানগুলির নির্দিষ্ট ক্রমকে নির্দেশ করে। অতএব, সর্বজনীন অক্ষরের নামগুলি অষ্টক এবং হেক্স এস্কেপ সিকোয়েন্সের পরিপূরক; যেখানে অষ্টক এবং হেক্স এস্কেপ সিকোয়েন্স কোড ইউনিটের প্রতিনিধিত্ব করে, সর্বজনীন অক্ষরের নামগুলি কোড পয়েন্টের প্রতিনিধিত্ব করে, যা "যৌক্তিক" অক্ষর হিসাবে বিবেচিত হতে পারে। আরও দেখুন এস্কেপ সিকোয়েন্স ডিগ্রাফ রেফারেন্স আরও পড়া আইএসও/আইইসি 9899:1999, প্রোগ্রামিং ভাষা-সি সি (প্রোগ্রামিং ভাষা) নিয়ন্ত্রণ অক্ষর