دوره‌ها / آموزش برنامه‌نویسی C / ثابت‌ها (C Constants)

ثابت‌ها (C Constants)

20 دقیقه Article

ثابت‌ها در C: مقادیری که هرگز تغییر نمی‌کنند 🔒🚫

ثابت‌ها (Constants) متغیرهایی هستند که مقدارِ آن‌ها در طولِ اجرایِ برنامه ثابت می‌ماند. استفاده از ثابت‌ها باعث می‌شود کدِ شما "خواناتر" و "ایمن‌تر" شود.

روشِ اول: کلمه‌یِ کلیدی const

این روش یک متغیرِ معمولی را به متغیری "فقط خواندنی" تبدیل می‌کند.

{code_block('const int MINUTES_IN_HOUR = 60;')}

روشِ دوم: دستورِ #define

این یک دستورِ پیش‌پردازنده است. قبل از کامپایل، هر جا که ثابت را ببیند، آن را با مقدارش جایگزین می‌کند. سمی‌کالن هم نیاز ندارد!

{code_block('#define PI 3.14159')}

چرا از ثابت‌ها استفاده کنیم؟

  1. خوانایی: دیدنِ کلمه‌یِ MAX_USERS بسیار بهتر از دیدنِ عددِ 100 در وسطِ کد است.
  2. نگهداریِ راحت: اگر بخواهید مقدار را عوض کنید، فقط کافیست یک خط را در بالایِ کد تغییر دهید.
تغییرِ ممنوع: اگر سعی کنید به یک متغیرِ const مقدارِ جدیدی بدهید، کامپایلر به شما اجازه نمی‌دهد و خطا می‌گیرید.
قرار دادِ نام‌گذاری: بینِ برنامه‌نویسانِ C مرسوم است که نامِ ثابت‌ها را با حروفِ بزرگ می‌نویسند تا در متنِ کد متمایز باشند.

تفاوتِ فنی:

ثابت‌هایِ const دارایِ نوع (Type) هستند و در حافظه جای می‌گیرند، اما #define فقط یک جایگزینیِ متنیِ ساده است.

<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسیِ متغیرها و مدیریتِ حافظه 🧱⚙️⚡

در زبانِ C، متغیرها فقط نام‌هایی برایِ ساده‌سازی نیستند؛ آن‌ها نماینده‌یِ آدرس‌هایی در حافظه‌یِ فیزیکی (RAM) هستند. درکِ نحوه‌یِ ذخیره‌سازیِ داده‌ها، مرز بینِ یک کدنویسِ معمولی و یک توسعه‌دهنده سیستم است.

۱. ترتیبِ بایت‌ها (Endianness)

وقتی یک عددِ ۴ بایتی (مثل int) در حافظه ذخیره می‌شود، بایت‌ها به چه ترتیبی قرار می‌گیرند؟

  • Little-Endian: بایتِ کم‌ارزش در آدرسِ کمتر ذخیره می‌شود (رایج در پردازنده‌های x86 و ARM).
  • Big-Endian: بایتِ پُرارزش در آدرسِ کمتر ذخیره می‌شود (رایج در شبکه‌ها و برخی پردازنده‌های قدیمی).

۲. نمایشِ اعدادِ اعشاری (IEEE 754)

اعدادِ اعشاری در C (مثل float و double) بر اساسِ استانداردِ IEEE 754 ذخیره می‌شوند. این استاندارد عدد را به سه بخش تقسیم می‌کند:

  1. Sign (علامت): ۱ بیت برای مثبت یا منفی بودن.
  2. Exponent (توان): برای مشخص کردنِ بزرگیِ عدد.
  3. Mantissa (مانتیس): برای مشخص کردنِ دقتِ عدد.

۳. کلاس‌هایِ ذخیره‌سازی (Storage Classes)

هر متغیر در C علاوه بر "نوع"، یک "کلاسِ ذخیره‌سازی" هم دارد که طولِ عمر و حوزه‌یِ دسترسیِ آن را مشخص می‌کند:

  • auto: پیش‌فرض برای متغیرهای محلی.
  • statice: مقدارِ خود را بینِ فراخوانی‌هایِ تابع حفظ می‌کند.
  • extern: برای دسترسی به متغیری که در فایلِ دیگری تعریف شده است.
  • register: به کامپایلر پیشنهاد می‌دهد متغیر را در ثبات‌هایِ CPU نگه دارد (برایِ سرعتِ فوق‌العاده).
نکته مهندسی: همیشه از sizeof() برای پیدا کردنِ اندازه‌یِ واقعیِ یک متغیر در سیستمِ خود استفاده کنید. اندازه‌یِ int در یک سیستمِ ۱۶ بیتی با یک سیستمِ ۶۴ بیتی می‌تواند متفاوت باشد!

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تعریف ثابت Easy
سوال تمرین

یک ثابت به نام BIRTHYEAR با استفاده از کلمه‌ی کلیدی const تعریف کرده و مقدار 1990 را به آن بدهید. سپس آن را چاپ کنید.

پاسخ تمرین
C
#include <stdio.h>

int main() {
  const int BIRTHYEAR = 1990;
  printf("%d", BIRTHYEAR);
  return 0;
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.