ثابت ها
ثابت مشابه متغير محلي براي ذخيره داده اي است که توسط برنامه استفاده مي شود. اما برخلاف متغير، مقدار ذخيره شده در يک ثابت در طي اجراي برنامه قابل تغيير نيست.
++C دو نوع ثابت واقعي و سمبليک دارد.
ثابت هاي واقعي
ثابت واقعي (literal constant) مقداري است که مستقيما در کد برنامه تايپ مي شود.
مثال. مقادير 20 و 0.28 در عبارات زير ثابت هاي واقعي هستند که در متغيرهاي count و tax_rate ذخيره مي شوند.
int count = 20;
float tax_rate = 0.28;
مقادير ثابت براي نوع هاي پيش ساخته مي تواند به صورت هاي دسيمال، اکتال، هگزادسيمال، مميزشناور يا کاراکتر باشند.
نقطه اعشار نشان دهنده ثابت مميزشناور است. ثابت هاي مميزشناور را مي توان به صورت نماد علمي هم بيان کرد.
مثال. اعداد زير همگي ثابت هاي مميزشناورهستند.
123.456
0.019
100.
1.23E2 or 123
4.08e6 or 4080000
0.85e-4 or 0.000085
حروف f يا F براي ثابت هاي float و l يا L براي ثابت هاي long double را مي توان به عنوان پسوند اضافه کرد در غير اينصورت با ثابت مميزشناور بعنوان يک عدد double برخورد مي شود.
ثابتي که نقطه اعشار ندارد بعنوان ثابت صحيح تفسير مي شود. ثابت هاي صحيح را به 3 صورت مي توان نشان داد:
• ثابت دهدهي. اگر ثابت با هر عدد غير صفري شروع شود بعنوان يک عدد صحيح مبناي 10 تفسير مي شود.. ثابت هاي دهدهي شامل ارقام 0 تا 9 و علامت + يا - مي توانند باشند. اگر علامت نوشته نشود ثابت مثبت درنظر گرفته مي شود.
• ثابت اکتال. اگر ثابت با رقم 0 شروع شود بعنوان يک عدد صحيح مبناي 8 تفسير مي شود. ثابت هاي اکتال مي توانند شامل ارقام 0 تا 9 و علامت + يا - باشند.
• ثابت هگزادسيمال. اگر ثابت با 0x يا 0X شروع شود بعنوان يک ثابت مبناي 16 با آن برخورد مي شود. ثابت هاي هگزادسيمال مي توانند شامل ارقام 0 تا 9 و حروف A تا F و علامت + يا - باشند.
ثابت هاي کاراکتري بين علامت کوتيشن (') قرارمي گيرند، مانند کاراکترهاي 'A' و '0'. کاراکترهاي خاص با علامت (\) نشان داده مي شوند مانند '\n' (newline)،'\t' (tab)،'\\' (backslash)،'\r' (carriage return)،'\'' (single quote)،'\"' (double quotes)، و غيره.
ثابت هاي سمبليک
ثابت سمبليک (symbolic constant) ثابتي است که توسط يک نام در برنامه مشخص مي شود. مقدار حقيقي ثابت سمبليک تنها يکبار هنگام تعريف آن وارد مي شود و اين مقدار مشابه ثابت هاي واقعي در طول اجراي برنامه قابل تغيير نيست. هر زمان که به مقدار ثابت در برنامه نياز باشد نام آن ذکر مي شود.
مثال. براي محاسبه مساحت و محيط دايره در يک برنامه به جاي نوشتن عدد 3.14 مي توان ثابت PI را تعريف و استفاده کرد.
circumference = PI * (2 * radius);
area = PI * (radius)*(radius);
در اين حالت هم نوشتن برنامه راحت تر است و برنامه داراي خوانائي بيشتر است هم اگر نياز به تغيير ثابت پي به مقدار 3.14159 براي بالا بردن دقت محاسبات باشد اصلاح تنها در يک نقطه برنامه که ثابت تعريف شده است صورت مي گيرد نه کل برنامه.
تعريف ثابت سمبليک
دوروش براي تعريف ثابت هاي سمبليک وجود دارد: راهنماي define# و کلمه کليدي const.
راهنماي define# در قسمت پيش پردازنده ها بيشتر توضيح داده خواهد شد. فرم کلي آن به صورت زير است:
#define CONSTNAME literal
CONSTNAME نام ثابت و literal مقدار واقعي آن است. راهنماي define# به کامپايلر دستور مي دهد که درسرتاسر کد برنامه CONSTNAME را با literal جايگزين کند.
نام ثابت از همان قواعد نامگذاري متغيرها تبعيت مي کند. مرسوم است که کليه حروف ثابت را بزرگ مي نويسند که باعث تشخيص راحت تر آن از متغيرها که با حروف کوچک هستند مي شود.
مثال. ثابت PI با مقدار 3.14159 تعريف شده است.
#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 باشد. آدرس آن هم قابل بازيابي است و مانند يک متغير داراي حوزه دسترسي است بنابراين ثابتي که درون يک تابع تعريف مي شود در ساير نقاط برنامه شناخته شده نيست.