Constants همراه با متغیر const
در زبان C، کلیدواژه const برای تعریف متغیرهایی استفاده میشود که مقدار آنها پس از مقداردهی اولیه نباید تغییر کند. به چنین متغیرهایی معمولاً Constant Variables گفته میشود.
برخلاف #define که صرفاً یک جایگزینی متنی در مرحله Preprocessing انجام میدهد، const یک متغیر واقعی با نوع داده مشخص ایجاد میکند که توسط کامپایلر مدیریت میشود.
مثال:
const int MAX_USERS = 100;
در این مثال، MAX_USERS یک متغیر از نوع int است که مقدار آن برابر با 100 بوده و تغییر آن مجاز نیست.
چرا از const استفاده کنیم؟
فرض کنید مقدار خاصی در بخشهای مختلف برنامه استفاده میشود:
double pi = 3.141592653589793;
اگر در ادامه برنامه به اشتباه مقدار آن تغییر کند:
pi = 10.5;
تمام محاسبات وابسته به pi نادرست خواهند شد.
استفاده از const چنین خطاهایی را در زمان کامپایل شناسایی میکند:
const double PI = 3.141592653589793;
اکنون:
PI = 10.5;
باعث خطای کامپایل خواهد شد.
Syntax
فرم کلی:
const data_type variable_name = value;
مثالها:
const int MAX_USERS = 100;
const float TAX_RATE = 0.09F;
const char GRADE = 'A';
const double PI = 3.141592653589793;
| بخش | توضیح |
|---|---|
const | مشخص میکند مقدار نباید تغییر کند |
data_type | نوع داده |
variable_name | نام متغیر |
value | مقدار اولیه |
مقداردهی اولیه هنگام تعریف
در اکثر موارد، متغیرهای const باید هنگام تعریف مقداردهی شوند.
مثال صحیح:
const int MAX_USERS = 100;
مثال نامناسب:
const int MAX_USERS;
زیرا متغیر Constant بدون مقدار اولیه معمولاً کاربردی ندارد.
Constant Integer Variables
یکی از رایجترین کاربردهای const تعریف اعداد صحیح ثابت است.
const int MAX_USERS = 100;
const int MIN_AGE = 18;
const int MAX_RETRIES = 3;
مثال:
#include <stdio.h>
int main() {
const int MAX_USERS = 100;
printf("%d\n", MAX_USERS);
return 0;
}
خروجی:
100
Constant Floating-Point Variables
const float TAX_RATE = 0.09F;
const double PI = 3.141592653589793;
const double GRAVITY = 9.81;
مثال:
double area = PI * radius * radius;
Constant Character Variables
const char GRADE_A = 'A';
const char YES = 'Y';
const char NO = 'N';
مثال:
const char STATUS = 'A';
تلاش برای تغییر مقدار
یکی از مهمترین ویژگیهای const جلوگیری از تغییر ناخواسته مقدار است.
مثال:
const int MAX_USERS = 100;
MAX_USERS = 200;
کامپایلر خطا تولید میکند:
error: assignment of read-only variable
این ویژگی باعث میشود بسیاری از خطاهای برنامهنویسی در همان زمان کامپایل شناسایی شوند.
استفاده در محاسبات
const double PI = 3.141592653589793;
double area = PI * radius * radius;
مثال کامل:
#include <stdio.h>
int main() {
const double PI = 3.141592653589793;
double radius = 5.0;
double area = PI * radius * radius;
printf("%.2f\n", area);
return 0;
}
خروجی:
78.54
استفاده برای تنظیمات برنامه
const int SERVER_PORT = 8080;
const int MAX_CONNECTIONS = 500;
const int BUFFER_SIZE = 4096;
این مقادیر در طول اجرای برنامه ثابت باقی میمانند.
تفاوت const و متغیر معمولی
متغیر معمولی:
int age = 25;
age = 30;
کاملاً معتبر است.
متغیر Constant:
const int age = 25;
age = 30;
خطای کامپایل ایجاد میکند.
تفاوت const و #define
بسیاری از برنامهنویسان تازهکار این دو را مشابه در نظر میگیرند، اما تفاوتهای مهمی دارند.
استفاده از #define
#define PI 3.141592653589793
استفاده از const
const double PI = 3.141592653589793;
مقایسه:
| ویژگی | #define | const |
|---|---|---|
| دارای نوع داده | خیر | بله |
| رزرو حافظه | ندارد | دارد |
| Type Checking | ندارد | دارد |
| قابل مشاهده در Debugger | خیر | بله |
| محدوده (Scope) | ندارد | دارد |
| توسط Preprocessor پردازش میشود | بله | خیر |
Scope در متغیرهای const
برخلاف #define، متغیرهای const از قوانین Scope پیروی میکنند.
مثال:
void printValue() {
const int MAX_USERS = 100;
printf("%d\n", MAX_USERS);
}
در اینجا MAX_USERS فقط داخل تابع قابل دسترسی است.
خارج از تابع:
printf("%d\n", MAX_USERS);
نامعتبر خواهد بود.
Global Constants
گاهی لازم است مقدار ثابتی در کل برنامه در دسترس باشد.
const double PI = 3.141592653589793;
نمونه:
#include <stdio.h>
const double PI = 3.141592653589793;
int main() {
printf("%f\n", PI);
return 0;
}
استفاده از const در پارامترهای تابع
گاهی تابع نباید مقدار ورودی را تغییر دهد.
مثال:
void printValue(const int value) {
printf("%d\n", value);
}
در این حالت، تغییر مقدار value داخل تابع مجاز نیست.
مثال نامعتبر:
void printValue(const int value) {
value = 50;
}
کامپایلر خطا تولید میکند.
Constant Strings
استفاده از const برای رشتهها بسیار رایج است.
const char *APP_NAME = "Inventory System";
مثال:
#include <stdio.h>
int main() {
const char *APP_NAME = "Inventory System";
printf("%s\n", APP_NAME);
return 0;
}
خروجی:
Inventory System
سناریوهای واقعی استفاده از const
ثابتهای ریاضی
const double PI = 3.141592653589793;
const double GRAVITY = 9.81;
تنظیمات برنامه
const int PORT = 8080;
const int MAX_USERS = 1000;
نرخها و ضرایب
const float TAX_RATE = 0.09F;
const float DISCOUNT = 0.15F;
رشتههای ثابت
const char *APP_NAME = "Inventory System";
const char *VERSION = "1.0.0";
چه زمانی از const استفاده کنیم؟
استفاده از const زمانی مناسب است که:
-
مقدار نباید پس از مقداردهی اولیه تغییر کند.
-
به Type Safety نیاز دارید.
-
میخواهید کامپایلر از تغییر ناخواسته مقدار جلوگیری کند.
-
مقدار باید در Debugger قابل مشاهده باشد.
-
میخواهید از مزایای Scope و قوانین نوع داده در زبان C استفاده کنید.
در پروژههای مدرن C، برای اکثر مقادیر ثابت، استفاده از const نسبت به #define ترجیح داده میشود؛ زیرا ایمنی نوع (Type Safety)، خوانایی و قابلیت نگهداری بهتری فراهم میکند و خطاهای بیشتری را در زمان کامپایل شناسایی میکند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات