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

ویکی‎کتاب، کتابخانهٔ آزاد
پرش به ناوبری پرش به جستجو
Gnome-go-last.svg
Gnome-go-first.svg

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

printf("\a")

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

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

به ترتیب:

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 قبل از وارد کردن عدد در مبنای ۱۶ ضروری می‌باشد

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

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

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

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