پرش به محتوا

زبان برنامه نویسی سی/ثابت‌ها

ویکی‎کتاب، کتابخانهٔ آزاد

گفتیم که ثابت‌ها بر دو نوع پایه‌ای و مقداری هستند . ثابت‌های پایه‌ای را نیز بیان نمودیم و اگر به یاد داشته باشید ثابت‌های کاراکتری و رشته‌ای ثابت‌هایی هستند که به ترتیب بین دو علامت سینگل کوت (') و دابل کوت (") قرار می‌گیرند و هر آنچه که مابین آنها قرار گرفته باشد ، به همان شکل توسط کامپایلر در نظر گرفته می‌شوند . همچنین ثابت‌های عددی ، مقادیری هستند که به متغیرها داده می‌شوند ( که در ادامه کتاب و در مبحث بعدی ، مفصلاً به آن می‌پردازیم ) اما گاهی امکان ایجاد یک کاراکتر در چارچوب زبان سی به شکل خاصی امکان پذیر است که داخل یک کاراکتر یا رشته ، قسمتی از آن را متغیر تعریف می‌کنیم ( به شکل نوشته‌های زیر ) تا توسط کامپایلر در برنامه در خروجیِ برنامه که فایل اجرایی است ، با مقدار متناظر خود ، جایگزین گردد . به این دستورات که باعث خروج از وضعیت ثابت رشته و یا کاراکتر می‌گردند ، دنباله‌های خروج یا دنباله‌های فرار گفته می‌شود . در ادامه این دنباله‌ها را می‌خوانید :

printf("\a")

تابع printf را هنوز نمی‌شناسید اما تا به حال چند بار به آن اشاره نموده‌ایم و شاید در جایی دیگر نیز به چشمتان خورده باشد ، فعلاً نیازی نیست آن را بشناسید اما این تابع همان طور که گفته شد متن گرفته شده را ( داخل پرانتز ) بر روی نمایشگر از طریق رابط خط‌دستوری نمایش می‌دهد . در اینجا یک رشته ایجاد کرده‌ایم که با یک دستور دنباله خروج آن را به خروجی دیگری ترجمه نموده‌ایم . یعنی آنچه که مابین دو علامت دابل کوت قرار گرفته شده ، نمایش داده نخواهد گردید ، بلکه دستور داده شده که همان هشدار ( alarm ) می‌باشد ؛ به صورت یک بوق از اسپیکر کیس و یا بعضاً به صورت هشدار تصویری بر روی مانیتور ( نمایشگر ) پدیدار خواهد گشت . پس فراموش نکنید که این دنباله‌ها برای شکستن ثابت بودن رشته و یا کاراکتر هستند و به خروجی دیگری ترجمه خواهند شد و خروجی ، مغایر با کاراکترهای نوشته شده است و این دنباله‌ها دستوراتی هستند که از ارکان زبان سی به شمار می‌روند. در ادامه بقیه دنباله‌ها را می‌نویسیم :

"\b"
"\f"
"\n"
"\r"
"\t"
"\v"
"\'"
"\""
"\\"
"\?"
"\ooo"
"\xdd"

که این دنباله‌های خروج تحت استاندارد C98 / C99 می‌باشند و در استانداردهای جدید C11 و C18 بقیه آنها عبارتند از :

\nnn
\xhexhex
\uhexhexhexhex
\Uhexhexhexhexhexhexhexhex

به ترتیب :

Backspace که به صورت مخفف b نوشته می‌شود، اشاره‌گر جایگاه تایپ را یک کاراکتر به عقب باز می‌گرداند

FormFeed که به صورت f نوشته شد ، اشاره‌گر جایگاه تایپ را یک صفحه جلو می‌برد ( یعنی وارد صفحه پائین می‌شود )

New Line که به صورت n نوشته شد، اشاره‌گر جایگاه تایپ را یک خط جلو می‌برد ( خط پائین ، یعنی خط را می‌شکند )

Carriage Return که به صورت r نوشته شد ، اشاره‌گر جایگاه تایپ را به ابتدای خط فعلی می‌برد

Horizontal Tab یا جدول ساز افقی (t)، اشاره‌گر جایگاه تایپ را با فاصله زیاد جلو می‌برد ( همانند اینکه در کیبورد خود ، داخل یک برنامه ویرایشگر متن دکمه Tab را بزنید )

Vertical Tab یا جدول ساز عمودی (v)، اشاره‌گر جایگاه تایپ را با فاصله زیاد پائین می‌برد ( گویی چند بار خط را شکسته‌اید )

Single Quote یا علامت نقل قول یکتا که همان علامت (') می‌باشد برای ایجاد یک علامت سینگل کوت در خروجی برنامه می‌باشد ( بدون این دستور نمی‌توانید علامت سینگل کوت را جهت نمایش استفاده کنید ، چرا که در صورت استفاده از علامت سینگل کوت ، کامپایلر آن را به عنوان یک مفهوم دیگر می‌بیند و ترجمه می‌نماید که باید یک کاراکتر را وارد کنید ؛ از این روی اگر می‌خواهید علامت سینگل کوت در داخل یک رشته نمایش داده شود ، باید از الگوی بالا تبعیت کنید )

Double Quote یا علامت نقل قول دوتایی که همان علامت (") می‌باشد برای ایجاد یک علامت دابل کوت در خروجی برنامه می‌باشد ( این دستور نیز همانند دستور سینگل کوت می‌باشد ، در صورت عدم رعایت استفاده از الگو ، علامت دابل کوت نوشته شده شما ، نمایش داده نخواهد گردید ؛ اگر می‌خواهید در متن خود علامت دابل کوت را نمایش دهید ، برای فرار از داخل رشته باید از الگوی بالا تبعیت نمائید در غیر این صورت باید رشته‌ای از کاراکترها را وارد نمائید )

Backslash Mark یا ممیز برعکس که همان علامت (\) می‌باشد، جهت استفاده همین علامت می‌باشد و همانند سینگل کوت و دابل کوت جهت نمایش آن ، مجبور به استفاده از الگو می‌باشید

Question Mark یا علامت سوال (?) یک علامت سوال در خروجی برنامه شما در رابط خط‌دستوری ، ایجاد می‌نماید

Octal Number جهت ایجاد اعداد در مبنای ۸ ( هشت‌هشتی )باید بعد از علامت ممیز برعکس ، بدون فاصله ، سه عدد را در مبنای ۸ وارد نمائید تا یک عدد اکتال ایجاد شود که می‌توانید آن را جهت نمایش استفاده کنید . دقت کنید که این دستور برای ایجاد نهایتاً یک بایت می‌باشد و در صورتی که شما عددی بزرگتر از ۲۵۵ در مبنای ۱۰ که همان دهدهی یا دسیمال می‌باشد ( مثلاً ۷۷۷ را وارد کنید یا به جای سه عدد از چهار عدد استفاده کنید مثل ۶۶۶۶ ) آنگاه ممکن است کامپایلر از شما خطا بگیرد و یا مطابق با به میل نویسنده کامپایلر می‌باشد تا با عدد شما چگونه رفتار نماید

Hexadecimal Number جهت ایجاد اعداد در مبنای ۱۶ ( شانزده‌شانزدهی ) که همان هگزادسیمال می‌باشد ، مورد استفاده قرار می‌گیرد . باید بدانید که اعداد در مبنای ۱۶ تا رسیدن به خود ۱۰ همانند اعداد دهدهی می‌باشد ، اما پس از آن به جای 11 می‌نویسم 0a و تا ff ( که مقدار 255 را در مبنای دهدهی دارد ) ادامه پیدا می‌کند . جهت سهولت در کار با اعداد هگزادسیمال ابتدا به سایت‌های دانش ریاضیات و رایانه رفته و پس از کسب آشنایی و تمرین ، کمی با برنامه‌های Hex Editor کار کنید تا ذهنتان در کار با اعداد هگزادسیمال روان گردد . فراموش نکنید که نوشتن حرف x قبل از وارد کردن عدد در مبنای ۱۶ ضروری می‌باشد

در استانداردهای قدیم

و در استانداردهای جدید :

Octal Numerical Number جهت ایجاد اعداد در مبنای ۸ می‌باشد که به شکل نوشته شده در بلوک استانداردهای جدید می‌باشد که آخرین مقدار قابل نوشتن در آن 777 در مبنای ۸ می‌باشد که در مبنای ۱۰ می‌شود 511

Unlimited Hexadecimal Number جهت ایجاد اعداد در مبنای ۱۶ و هگزادسیمال می‌باشد که هر مقدار که خواستید می‌توانید اعداد را در مبنای ۱۶ و به صورت شانزده شانزدهی وارد کنید تا به صورت عدد در نظر گرفته شوند

Unicode Characters by UTF-16 Standard جهت ایجاد کاراکترهای جدیدتر تصویب شده توسط مؤسسه Unicode در قالب انکدینگ/دکودینگ UTF-16 می‌باشد که در برنامه کامپایل شده خروجی در صورت پشتیابی سیستم‌عامل و فونت‌هایش نمایش داده خواهند شد

Unicode Characters by UTF-32 Standard جهت ایجاد کاراکترهای جدید تصویب شده توسط مؤسسه Unicode در قالب انکدینگ/دکودینگ UTF-32 می‌باشد که در صورت پشتیبانی کامپایلر در برنامه کامپایل شده خروجی در صورت پشتیابی سیستم‌عامل و فونت‌هایش ، نمایش داده خواهند شد

همچنین در نظر داشته باشید که طی استفاده از توابع کتابخانه‌ای ؛ به این لیست دنباله‌ها ( که به آنها نشانه‌های فرمت کردن گفته می‌شود ) افزوده می‌گردد که پر واضح است فقط تحت استفاده از توابع مذکور که در فصل و مقاله‌های خود مورد بررسی قرار می‌گیرند ، خواهیم نوشت

ثابت‌های مقداری

به مبحث ثابت‌های مقداری ، طی آغاز کتاب اشاره نمودیم . داده‌هایی هستند که مقدار و موجودی آنها قابل تغییر نیست مگر اینکه آن را از حالت ثابت خارج کنید . با نحوه ایجاد ثابت از طریق پیش پردازنده define در فصل پیش پردازنده‌ها آشنا شدید . این دستور مستقیم یا پیش پردازنده ، ماکرو ایجاد می‌نماید ؛ یعنی مقداری را که برای آن تعریف نموده‌اید جایگزین شناسه خود می‌گرداند . اما جهت ثابت کردن مقدار یک داده از نوع متغیر ، ابتدا باید یک متغیر ایجاد نمائید ( که در مبحث بعدی به آن می‌پردازیم ) و آن را ثابت کنید که این عمل بدین شکل انجام می‌شود : ابتدا کلیدواژه const را تایپ می نمائید که به معنی ثابت می‌باشد سپس مطابق با الگوی نوشتن کدهای زبان سی با یک فاصله یا فضای سفید دیگر ، کلیدواژه‌های ایجاد کننده متغیر خود و نام متغیر خود را می‌نویسید و اگر نیاز داشتید در همان جا یا در ادامه برنامه مقدار متناظر با متغیر خود را می‌نویسید . مقدار ایجاد شده در ادامه برنامه ؛ هرگز نباید تغییر یابد مگر آنکه کلیدواژه const را از متن منبع خود حذف نمائید . در صورتی که مقدار تازه‌ای به آن بدهید یا مقدار آن را با کدهایی که نوشته‌اید بخواهید تغییر بدهید ، کامپایلر از شما خطا خواهد گرفت

ثابت کردن مقدار یک داده از این روی به کار برنامه نویس می‌آید که گاهی می‌خواهیم مطمئن شویم که مقدار مورد نظر ما طی برنامه هرگز تغییر نخواهد کرد . مخصوصاً که در برنامه‌های بزرگ زمانی که با داده‌های خود کار می‌کنید ممکن است کد را طوری بنویسید که به عنوان مثال تابعی بخواهد مقدار آن را تغییر بدهد ، در این صورت جلوی تغییر آن گرفته خواهد گردید . در برنامه‌های خیلی بزرگ نیز ممکن است فراموش کنید که مقدار مورد نظر شما ثابت است و بخواهید در جای دیگری از برنامه به صورت دستی مقدار جدیدی به آن بدهید که کامپایلر با وجود این کلیدواژه جلوی آن را خواهد گرفت و همچنان به شما اخطار خواهد داد