Escape sequences in C
فرار کے سلسلے پروگرامنگ زبانوں سی اور سی + + میں استعمال ہوتے ہیں، اور ان کے ڈیزائن کو بہت سی دوسری زبانوں جیسے جاوا، پی ایچ پی، سی #وغیرہ میں نقل کیا گیا تھا۔ فرار کی ترتیب حروف کی ایک ترتیب ہے جو کسی کردار یا سٹرنگ کے اندر استعمال ہونے پر خود کی نمائندگی نہیں کرتی ہے، لیکن اس کا ترجمہ کسی دوسرے کردار یا حروف کی ترتیب میں کیا جاتا ہے جس کی براہ راست نمائندگی کرنا مشکل یا ناممکن ہو سکتا ہے۔ سی میں، تمام فرار کے سلسلے دو یا زیادہ حروف پر مشتمل ہوتے ہیں، جن میں سے پہلا بیک سلیش ہوتا ہے، (جسے "فرار کا کردار" کہا جاتا ہے) ؛ باقی حروف فرار کے سلسلے کی تشریح کا تعین کرتے ہیں۔ مثال کے طور پر، ایک فرار کی ترتیب ہے جو ایک نئی لائن کے کردار کی نشاندہی کرتی ہے۔ محرک فرض کریں کہ ہم ایک لائن پر پرنٹ کرنا چاہتے ہیں، اس کے بعد اگلی لائن پر۔ کوئی بھی پرنٹ کیے جانے والے سٹرنگ کو ایک ہی لفظی طور پر پیش کرنے کی کوشش کر سکتا ہے: #include <stdio.h> انٹی مین () {پرنٹ ایف ("ہیلو، ورلڈ! ") ؛ ریٹرن 0 ؛} یہ C میں درست نہیں ہے، کیونکہ ایک سٹرنگ لیٹرل متعدد منطقی ماخذ لائنوں کو نہیں پھیلا سکتا ہے۔ اس پر کام نیو لائن کردار کو اس کی عددی قدر (اے ایس سی آئی آئی میں)، #include <stdio.h> انٹ مین () {پرنٹ ایف ("ہیلو،% سی ورلڈ! "، 0x0A) ؛ ریٹرن 0 ؛} یہ پروگرام کو پرنٹ کرنے کی ہدایت دیتا ہے، اس کے بعد بائٹ جس کی عددی قیمت ہے، اس کے بعد۔ اگرچہ یہ واقعی کام کرے گا جب مشین ASCII انکوڈنگ کا استعمال کرتی ہے، یہ ان سسٹمز پر کام نہیں کرے گی جو دیگر انکوڈنگ استعمال کرتے ہیں، جن کی نئی لائن کے کردار کے لیے مختلف عددی قدر ہوتی ہے۔ یہ بھی ایک اچھا حل نہیں ہے کیونکہ یہ اب بھی لفظی اندر ایک نئی لائن کے کردار کی نمائندگی کرنے کی اجازت نہیں دیتا ہے، اور اس کے بجائے پرنٹ ایف کے الفاظ کا فائدہ اٹھاتا ہے۔ ان مسائل کو حل کرنے اور سسٹمز کے درمیان زیادہ سے زیادہ پورٹیبلٹی کو یقینی بنانے کے لیے، سی لفظی طور پر ایک نئی لائن کے کردار کے طور پر تشریح کرتا ہے، جو بھی ٹارگٹ سسٹم پر ہو سکتا ہے: #include <stdio.h> انٹ مین () {پرنٹ ایف ("ہیلو، \n ورلڈ! ") ؛ واپسی 0 ؛} اس کوڈ میں، فرار کی ترتیب خط کے بعد آنے والے بیک سلیش کے لیے نہیں ہے، کیونکہ بیک سلیش مرتب کرنے والے کے ذریعے حروف کی تشریح کے عام طریقے سے" فرار "کا سبب بنتا ہے۔ بیک سلیش کو دیکھنے کے بعد، مرتب کرنے والا دوسرے کردار سے فرار کی ترتیب کو مکمل کرنے کی توقع کرتا ہے، اور پھر فرار کی ترتیب کو ان بائٹس میں ترجمہ کرتا ہے جن کی نمائندگی کرنے کا ارادہ ہے۔ اس طرح، ایک سرایت شدہ نئی لائن کے ساتھ ایک سٹرنگ کی نمائندگی کرتا ہے، اس سے قطع نظر کہ یہ اندر یا کہیں اور استعمال ہوتا ہے۔ اس سے یہ مسئلہ پیدا ہوتا ہے کہ لفظی طور پر حقیقی بیک سلیش کی نمائندگی کیسے کی جائے۔ یہ فرار کی ترتیب کا استعمال کرتے ہوئے کیا جاتا ہے، جیسا کہ اگلے حصے میں دیکھا گیا ہے۔ کچھ زبانوں میں فرار کے سلسلے نہیں ہوتے ہیں، مثال کے طور پر پاسکل۔ اس کے بجائے ایک کمانڈ بشمول ایک نئی لائن استعمال کی جائے گی (اس میں ایک نئی لائن شامل ہے، اسے خارج کر دیا گیا ہے)۔ رائٹلن ('ہیلو') ؛ لکھیں ('دنیا! ') ؛ فرار کے ترتیبات کی جدول مندرجہ ذیل فرار کے ترتیبات کو معیاری سی میں بیان کیا گیا ہے۔ یہ جدول ان اقدار کو بھی ظاہر کرتا ہے جن کا وہ اے ایس سی آئی آئی میں نقشہ بناتے ہیں۔ تاہم، یہ فرار کے سلسلے سی مرتب والے کسی بھی سسٹم پر استعمال کیے جا سکتے ہیں، اور اگر سسٹم ASCII پر مبنی کریکٹر انکوڈنگ کا استعمال نہیں کرتا ہے تو مختلف اقدار کا نقشہ بنا سکتا ہے۔ نوٹ 1.Common غیر معیاری کوڈ ؛ نیچے نوٹس سیکشن دیکھیں۔ نوٹ 2.There ایک، دو، یا تین آکٹل نمبر n موجود ہو سکتے ہیں ؛ نیچے نوٹس سیکشن دیکھیں۔ نوٹ 3. \u 4 ہیکسا ڈیسیمل ہندسوں کو لیتا ہے ؛ نیچے نوٹس سیکشن دیکھیں۔ نوٹ 4. \U 8 ہیکسا ڈیسیمل ہندسوں کو لیتا ہے ؛ نیچے نوٹس سیکشن دیکھیں۔ نوٹ ایک بائٹ تیار کرتے ہیں، اس حقیقت کے باوجود کہ پلیٹ فارم ایک نئی لائن کو ظاہر کرنے کے لیے ایک سے زیادہ بائٹ استعمال کر سکتا ہے، جیسے کہ DOS/ونڈوز CRLF ترتیب۔ ڈاس اور ونڈوز پر سے ترجمہ اس وقت ہوتا ہے جب بائٹ کو کسی فائل یا کنسول پر لکھا جاتا ہے، اور الٹا ترجمہ اس وقت کیا جاتا ہے جب ٹیکسٹ فائلیں پڑھی جاتی ہیں۔ ایک ہیکس فرار کی ترتیب میں کم از کم ایک ہیکس ہندسہ ہونا چاہیے، جس کی کوئی اوپری حد نہیں ہے۔ یہ اتنے ہیکس ہندسوں تک جاری رہتا ہے جتنے موجود ہیں۔ اس طرح، مثال کے طور پر، عددی قدر ABCDEF16 کے ساتھ بائٹ کی نشاندہی کرتا ہے، اس کے بعد حرف، جو کہ ہیکس ہندسہ نہیں ہے۔ تاہم، اگر نتیجے میں آنے والی انٹیجر ویلیو ایک بائٹ میں فٹ ہونے کے لیے بہت بڑی ہے، تو تفویض کردہ اصل عددی ویلیو نفاذ سے متعین ہے۔ زیادہ تر پلیٹ فارمز میں 8 بٹ اقسام ہوتی ہیں، جو ایک مفید ہیکس فرار کی ترتیب کو دو ہیکس ہندسوں تک محدود کرتی ہیں۔ تاہم، دو ہیکس ہندسوں سے زیادہ لمبے ہیکس فرار کے سلسلے ایک وسیع کردار یا وسیع تار لفظی (ایل کے ساتھ سابقہ) کے اندر مفید ہو سکتے ہیں: چار s1 [] = "\x12" ؛// واحد چار جس کی قیمت 0x12 (اعشاریہ میں 18) چار s1 [] = "\x1234" ؛// عمل درآمد سے طے شدہ قیمت کے ساتھ واحد چار، جب تک کہ چار کافی لمبا نہ ہو Wchar _ t s2 [] = L "\x1234" ؛// واحد Wchar _ t جس کی قیمت 0x1234 ہو، بشرطیکہ Wchar _ t کافی لمبا ہو (16 بٹس کافی) ایک آکٹل فرار کی ترتیب ایک، دو، یا تین آکٹل ہندسوں پر مشتمل ہوتی ہے۔ آکٹل فرار کی ترتیب اس وقت ختم ہوتی ہے جب اس میں یا تو پہلے سے ہی تین آکٹل ہندسے ہوتے ہیں، یا اگلا حرف آکٹل ہندسہ نہیں ہوتا ہے۔ مثال کے طور پر، ایک واحد آکٹل فرار کی ترتیب ہے جو ہندسوں کے بعد فرار کی ترتیب کے بجائے عددی قدر 9 (آکٹل میں 11) کے ساتھ ایک بائٹ کی نشاندہی کرتی ہے۔ تاہم، یہ آکٹل فرار کی ترتیب ہے جس کے بعد ہندسہ آتا ہے۔ عددی قدر 1 کے ساتھ بائٹ کو ظاہر کرنے کے لیے، جس کے بعد ہندسہ آتا ہے، کوئی بھی استعمال کر سکتا ہے، کیونکہ C خود بخود ملحقہ سٹرنگ لیٹرلز کو جوڑتا ہے۔ نوٹ کریں کہ کچھ تین ہندسوں کے آکٹل فرار کے سلسلے ایک بائٹ میں فٹ ہونے کے لیے بہت بڑے ہو سکتے ہیں۔ اس کے نتیجے میں اصل میں تیار کردہ بائٹ کے لیے عمل درآمد سے متعین قیمت حاصل ہوتی ہے۔ فرار کی ترتیب عام طور پر استعمال ہونے والی آکٹل فرار کی ترتیب ہے، جو صفر کی قیمت کے ساتھ صفر کردار کی نشاندہی کرتی ہے۔ غیر معیاری فرار کی ترتیب ایک ترتیب جیسے کہ سی معیار کے مطابق ایک درست فرار کی ترتیب نہیں ہے کیونکہ یہ اوپر کی میز میں نہیں پایا جاتا ہے۔ سی معیار کی تشخیص کے لیے اس طرح کے "غلط" فرار کے سلسلے کی ضرورت ہوتی ہے (یعنی مرتب کرنے والے کو ایک ایرر میسج پرنٹ کرنا ہوگا)۔ اس حقیقت کے باوجود، کچھ مرتب عمل درآمد سے متعین الفاظ کے ساتھ اضافی فرار کے سلسلے کی وضاحت کر سکتے ہیں۔ ایک مثال فرار کی ترتیب ہے، جس میں اے ایس سی آئی آئی میں ہیکساڈیسیمل ویلیو کے طور پر 1 بی ہے، فرار کے کردار کی نمائندگی کرتا ہے، اور جی سی سی، کلانگ اور ٹی سی سی میں سپورٹ کیا جاتا ہے۔ تاہم اسے سی معیاری ذخیرے میں شامل نہیں کیا گیا تھا، کیونکہ کچھ کرداروں کے سیٹوں (جیسے ای بی سی ڈی آئی سی) میں اس کا کوئی بامعنی مساوی نہیں ہے۔ C99 معیار سے، C نے فرار کے سلسلے کی بھی حمایت کی ہے جو سٹرنگ لیٹرلز میں یونیکوڈ کوڈ پوائنٹس کی نشاندہی کرتے ہیں۔ اس طرح کے فرار کے سلسلے کو عالمگیر کردار کے نام کہا جاتا ہے، اور اس کی شکل یا ہوتی ہے، جہاں ہیکس ہندسے کا مطلب ہوتا ہے۔ زیر غور دوسرے فرار کے سلسلے کے برعکس، ایک عالمگیر کردار کا نام ایک سے زیادہ کوڈ یونٹ میں پھیل سکتا ہے۔ ترتیب کوڈ پوائنٹ کی نشاندہی کرتی ہے، جس کی تشریح ہیکساڈیسیمل نمبر کے طور پر کی جاتی ہے۔ ترتیب کوڈ پوائنٹ کی نشاندہی کرتی ہے، جس کی تشریح ہیکساڈیسیمل نمبر کے طور پر کی جاتی ہے۔ (لہذا، U + 10000 یا اس سے زیادہ پر واقع کوڈ پوائنٹس کو نحو کے ساتھ ظاہر کیا جانا چاہیے، جبکہ نچلے کوڈ پوائنٹس یا استعمال کر سکتے ہیں۔) کوڈ پوائنٹ کو ٹارگٹ سسٹم پر منزل کی قسم کی انکوڈنگ میں کوڈ یونٹس کی ترتیب میں تبدیل کیا جاتا ہے۔ مثال کے طور پر (جہاں انکوڈنگ UTF-8، اور UTF-16 کے لیے ہے): چار s1 [] = "\xC0" ؛// ایک واحد بائٹ جس کی قیمت 0xC0 ہے، درست UTF-8 چار s2 [] = "\u00C0" نہیں ہے ؛// 0xC3، 0x80 اقدار کے ساتھ دو بائٹس، U + 00C0 کی UTF-8 انکوڈنگ Wchar _ t s3 [] = L "\xC0" ؛// 0x00C0 کی قدر کے ساتھ ایک واحد Wchar _ t [] = L "\u00C0" ؛// ایک واحد Wchar _ t کے ساتھ اہم بات یہ ہے کہ عالمگیر کردار کا نام ہمیشہ کردار "Å" کی نشاندہی کرتا ہے، اس سے قطع نظر کہ یہ کس قسم کے سٹرنگ لیٹرل میں استعمال ہوتا ہے، یا استعمال میں انکوڈنگ۔ آکٹل اور ہیکس فرار کے سلسلے ہمیشہ انکوڈنگ سے قطع نظر عددی اقدار کے کچھ ترتیبات کی نشاندہی کرتے ہیں۔ لہذا، عالمگیر کردار کے نام آکٹل اور ہیکس فرار کے سلسلے کی تکمیل کرتے ہیں ؛ جبکہ آکٹل اور ہیکس فرار کے سلسلے کوڈ یونٹس کی نمائندگی کرتے ہیں، عالمگیر کردار کے نام کوڈ پوائنٹس کی نمائندگی کرتے ہیں، جنہیں "منطقی" حروف سمجھا جا سکتا ہے۔ مزید پڑھنا آئی ایس او/آئی ای سی 9899:1999، پروگرامنگ زبانیں-سی سی (پروگرامنگ زبان) کنٹرول حروف