ثابت ها
ثابت همانند متغیر محلی است به منظور ذخیرهء داده ایی که توسط برنامه استفاده شده است کاربرد دارد. اما برخلاف متغیر، مقدار ذخیره شده در یک ثابت در طی اجرای برنامه قابل تغییر نیست.
++C دو نوع ثابت واقعی و سمبلیک دارد.
ثابت های واقعی
ثابت واقعی (literal constant) مقداری است که مستقیما در کد برنامه تایپ می شود.
مثال. مقادیر ۲۰ و ۰٫۲۸ در عبارات زیر ثابت های واقعی هستند که در متغیرهای count و tax_rate ذخیره می شوند.
int count = 20;
float tax_rate = 0.28;
مقادیر ثابت برای نوع های پیش ساخته می تواند به صورت های دسیمال، اکتال، هگزادسیمال، ممیزشناور یا کاراکتر باشند.
نقطه اعشار نشان دهنده ثابت ممیزشناور است. ثابت های ممیزشناور را می توان به صورت نماد علمی هم بیان کرد.
مثال. اعداد زیر همگی ثابت های ممیزشناورهستند.
۱۲۳٫۴۵۶
۰٫۰۱۹
۱۰۰٫
۱٫۲۳E2 or 123
۴٫۰۸e6 or 4080000
۰٫۸۵e-4 or 0.000085
حروف f یا F برای ثابت های float و l یا L برای ثابت های long double را می توان به عنوان پسوند اضافه کرد در غیر اینصورت با ثابت ممیزشناور بعنوان یک عدد double برخورد می شود.
ثابتی که نقطه اعشار ندارد بعنوان ثابت صحیح تفسیر می شود. ثابت های صحیح را به ۳ صورت می توان نشان داد:
• ثابت دهدهی. اگر ثابت با هر عدد غیر صفری شروع شود بعنوان یک عدد صحیح مبنای ۱۰ تفسیر می شود.. ثابت های دهدهی شامل ارقام ۰ تا ۹ و علامت + یا – می توانند باشند. اگر علامت نوشته نشود ثابت مثبت درنظر گرفته می شود.
• ثابت اکتال. اگر ثابت با رقم ۰ شروع شود بعنوان یک عدد صحیح مبنای ۸ تفسیر می شود. ثابت های اکتال می توانند شامل ارقام ۰ تا ۹ و علامت + یا – باشند.
• ثابت هگزادسیمال. اگر ثابت با ۰x یا ۰X شروع شود بعنوان یک ثابت مبنای ۱۶ با آن برخورد می شود. ثابت های هگزادسیمال می توانند شامل ارقام ۰ تا ۹ و حروف A تا F و علامت + یا – باشند.
ثابت های کاراکتری بین علامت کوتیشن (‘) قرارمی گیرند، مانند کاراکترهای ‘A’ و ‘۰’. کاراکترهای خاص با علامت () نشان داده می شوند مانند ‘n’ (newline)،’t’ (tab)،” (backslash)،’r’ (carriage return)،”’ (single quote)،'”‘ (double quotes)، و غیره.
ثابت های سمبلیک
ثابت سمبلیک (symbolic constant) ثابتی است که توسط یک نام در برنامه مشخص می شود. مقدار حقیقی ثابت سمبلیک تنها یکبار هنگام تعریف آن وارد می شود و این مقدار مشابه ثابت های واقعی در طول اجرای برنامه قابل تغییر نیست. هر زمان که به مقدار ثابت در برنامه نیاز باشد نام آن ذکر می شود.
مثال. برای محاسبه مساحت و محیط دایره در یک برنامه به جای نوشتن عدد ۳٫۱۴ می توان ثابت PI را تعریف و استفاده کرد.
circumference = PI * (2 * radius);
area = PI * (radius)*(radius);
در این حالت هم نوشتن برنامه راحت تر است و برنامه دارای خوانائی بیشتر است هم اگر نیاز به تغییر ثابت پی به مقدار ۳٫۱۴۱۵۹ برای بالا بردن دقت محاسبات باشد اصلاح تنها در یک نقطه برنامه که ثابت تعریف شده است صورت می گیرد نه کل برنامه.
تعریف ثابت سمبلیک
دوروش برای تعریف ثابت های سمبلیک وجود دارد: راهنمای define# و کلمه کلیدی const.
راهنمای define# در قسمت پیش پردازنده ها بیشتر توضیح داده خواهد شد. فرم کلی آن به صورت زیر است:
#define CONSTNAME literal
CONSTNAME نام ثابت و literal مقدار واقعی آن است. راهنمای define# به کامپایلر دستور می دهد که درسرتاسر کد برنامه CONSTNAME را با literal جایگزین کند.
نام ثابت از همان قواعد نامگذاری متغیرها تبعیت می کند. مرسوم است که کلیه حروف ثابت را بزرگ می نویسند که باعث تشخیص راحت تر آن از متغیرها که با حروف کوچک هستند می شود.
مثال. ثابت PI با مقدار ۳٫۱۴۱۵۹ تعریف شده است.
#define PI 3.14159
دقت کنید که خط define# به سمیکولن(;) ختم نمی شود. define# می تواند در هر کجای برنامه باشد ولی معمولا همگی در قسمتی از ابتدای کد برنامه و قبل از تابع main() هستند.
روش دوم تعریف یک ثابت سمبلیک استفاده از کلمه کلیدی const است. const را می توان به اول هر اعلان متغیری اضافه کرد. در این صورت متغیر در طول اجرای برنامه قابل تغییر نخواهد بود. اگر برنامه سعی به تغییر آن کند خطای کامپایلر صادر خواهد شد.
مثال.
const int count = 100;
const float pi = 3.14159;
const long debt = 12000000, float tax_rate = 0.21;
const روی کلیه متغیرهای خط اعلان تاثیر می گذارد.
تفاوت ثابت هائی که با #define و const تعریف می شوند در حوزه آنهاست. وقتی از #define استفاده می کنید کنترل ثابت ها را از حوزه کامپایلر خارج می کنید؛ type checking روی اسم آن انجام نمی گیرد و آدرس آنرا قابل بازیابی نیست و اشاره گریا ارجاعی به آن ممکن نیست و نمی تواند از نوع user-defined باشد. اما اگر ثابت توسط const تعریف شده باشد می تواند از هر نوع داده استاندارد یا user-defined باشد. آدرس آن هم قابل بازیابی است و مانند یک متغیر دارای حوزه دسترسی است بنابراین ثابتی که درون یک تابع تعریف می شود در سایر نقاط برنامه شناخته شده نیست.