همهی متغیرها باید قبل از استفاده اعلان بشن، هرچند بعضی از اعلانها میتونن بهصورت ضمنی هم از روی محتوا حدس زده بشن.
یه اعلان (declaration) نوع دادهی یه متغیر رو مشخص میکنه و شامل یه لیست از یک یا چند متغیر از اون نوعه، مثلاً:
int lower, upper, step;
char c, line[1000];
میتونیم متغیرها رو هرجور که بخوایم بین اعلانها پخش کنیم. مثلاً کد بالا میتونه به این شکل هم نوشته بشه:
int lower;
int upper;
int step;
char c;
char line[1000];
این شکل دوم شاید طولانیتر باشه، ولی برای اضافه کردن توضیحات (comment) کنار هر اعلان خیلی کاربردیه، مخصوصاً وقتی قراره بعداً تغییرش بدیم.
یه متغیر همچنین میتونه در همون زمان اعلان، مقداردهی اولیه (initialize) بشه.
اگه اسم متغیر بعدش یه = و یه عبارت بیاد، اون عبارت نقش مقدار اولیه رو داره، مثل:
char esc = '\\';
int i = 0;
int limit = MAXLINE + 1;
float eps = 1.0e-5;
🔹 اگه متغیر خودکار (automatic) نباشه (یعنی خارج از تابع تعریف شده باشه)، مقداردهی اولیه فقط یک بار انجام میشه، اونم قبل از شروع اجرای برنامه، و مقدار اولیه باید یه عبارت ثابت (constant expression) باشه.
🔹 ولی اگه متغیر خودکار باشه (مثلاً داخل یه تابع)، مقداردهی اولیه هر بار که تابع یا بلاک اجرا میشن انجام میشه، و مقدار اولیه میتونه هر عبارتی باشه.
🔹 متغیرهای external و static اگه مقداردهی نشن، بهصورت پیشفرض با صفر مقداردهی میشن.
🔹 متغیرهای خودکار بدون مقداردهی اولیه مقدار تعریفنشده (garbage) دارن.
عبارت const هم میتونه در اعلان هر متغیری بیاد تا بگه مقدار این متغیر نباید تغییر کنه.
برای آرایهها هم یعنی عناصرش تغییر نمیکنن.
مثلاً:
const double e = 2.71828182845905;
const char msg[] = "warning: ";
میتونیم از const برای آرگومانهای تابع هم استفاده کنیم تا نشون بدیم اون تابع آرایهی ورودی رو تغییر نمیده:
int strlen(const char[]);
اگه سعی کنیم مقدار یه متغیر const رو تغییر بدیم، رفتارش بستگی به پیادهسازی (implementation-defined) داره — یعنی ممکنه خطا بده یا نتیجهی غیرقابل پیشبینی ایجاد کنه.