ثابتها (C Constants)
ثابتها در C: مقادیری که هرگز تغییر نمیکنند 🔒🚫
ثابتها (Constants) متغیرهایی هستند که مقدارِ آنها در طولِ اجرایِ برنامه ثابت میماند. استفاده از ثابتها باعث میشود کدِ شما "خواناتر" و "ایمنتر" شود.
روشِ اول: کلمهیِ کلیدی const
این روش یک متغیرِ معمولی را به متغیری "فقط خواندنی" تبدیل میکند.
{code_block('const int MINUTES_IN_HOUR = 60;')}روشِ دوم: دستورِ #define
این یک دستورِ پیشپردازنده است. قبل از کامپایل، هر جا که ثابت را ببیند، آن را با مقدارش جایگزین میکند. سمیکالن هم نیاز ندارد!
{code_block('#define PI 3.14159')}چرا از ثابتها استفاده کنیم؟
- خوانایی: دیدنِ کلمهیِ
MAX_USERSبسیار بهتر از دیدنِ عددِ100در وسطِ کد است. - نگهداریِ راحت: اگر بخواهید مقدار را عوض کنید، فقط کافیست یک خط را در بالایِ کد تغییر دهید.
const مقدارِ جدیدی بدهید، کامپایلر به شما اجازه نمیدهد و خطا میگیرید.
تفاوتِ فنی:
ثابتهایِ const دارایِ نوع (Type) هستند و در حافظه جای میگیرند، اما #define فقط یک جایگزینیِ متنیِ ساده است.
بخش تخصصی: مهندسیِ متغیرها و مدیریتِ حافظه 🧱⚙️⚡
در زبانِ C، متغیرها فقط نامهایی برایِ سادهسازی نیستند؛ آنها نمایندهیِ آدرسهایی در حافظهیِ فیزیکی (RAM) هستند. درکِ نحوهیِ ذخیرهسازیِ دادهها، مرز بینِ یک کدنویسِ معمولی و یک توسعهدهنده سیستم است.
۱. ترتیبِ بایتها (Endianness)
وقتی یک عددِ ۴ بایتی (مثل int) در حافظه ذخیره میشود، بایتها به چه ترتیبی قرار میگیرند؟
- Little-Endian: بایتِ کمارزش در آدرسِ کمتر ذخیره میشود (رایج در پردازندههای x86 و ARM).
- Big-Endian: بایتِ پُرارزش در آدرسِ کمتر ذخیره میشود (رایج در شبکهها و برخی پردازندههای قدیمی).
۲. نمایشِ اعدادِ اعشاری (IEEE 754)
اعدادِ اعشاری در C (مثل float و double) بر اساسِ استانداردِ IEEE 754 ذخیره میشوند. این استاندارد عدد را به سه بخش تقسیم میکند:
- Sign (علامت): ۱ بیت برای مثبت یا منفی بودن.
- Exponent (توان): برای مشخص کردنِ بزرگیِ عدد.
- Mantissa (مانتیس): برای مشخص کردنِ دقتِ عدد.
۳. کلاسهایِ ذخیرهسازی (Storage Classes)
هر متغیر در C علاوه بر "نوع"، یک "کلاسِ ذخیرهسازی" هم دارد که طولِ عمر و حوزهیِ دسترسیِ آن را مشخص میکند:
auto: پیشفرض برای متغیرهای محلی.statice: مقدارِ خود را بینِ فراخوانیهایِ تابع حفظ میکند.extern: برای دسترسی به متغیری که در فایلِ دیگری تعریف شده است.register: به کامپایلر پیشنهاد میدهد متغیر را در ثباتهایِ CPU نگه دارد (برایِ سرعتِ فوقالعاده).
sizeof() برای پیدا کردنِ اندازهیِ واقعیِ یک متغیر در سیستمِ خود استفاده کنید. اندازهیِ int در یک سیستمِ ۱۶ بیتی با یک سیستمِ ۶۴ بیتی میتواند متفاوت باشد!
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک ثابت به نام BIRTHYEAR با استفاده از کلمهی کلیدی const تعریف کرده و مقدار 1990 را به آن بدهید. سپس آن را چاپ کنید.
#include <stdio.h>
int main() {
const int BIRTHYEAR = 1990;
printf("%d", BIRTHYEAR);
return 0;
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.