در زبان C، نام متغیر یا Identifier شناسهای است که به یک مکان حافظه اشاره میکند و به برنامهنویس اجازه میدهد به آن داده دسترسی داشته باشد. انتخاب نام مناسب برای متغیرها یکی از مهمترین جنبههای برنامهنویسی حرفهای است که بر خوانایی، قابلیت نگهداری و درک کد تأثیر مستقیم دارد .
C قوانین سختگیرانهای برای نامگذاری متغیرها دارد که رعایت آنها الزامی است. علاوه بر قوانین، اصول و قراردادهایی نیز وجود دارند که اگرچه اجباری نیستند، اما رعایت آنها کد را حرفهایتر میکند.
این قوانین توسط کامپایلر بررسی میشوند و تخلف از آنها منجر به خطای کامپایل میشود :
نام متغیرها میتوانند شامل موارد زیر باشند:
حروف بزرگ و کوچک انگلیسی (A-Z و a-z)
اعداد (0-9)
زیرخط (_)
int valid_name; // ✅ فقط حروف و زیرخط int validName; // ✅ حروف بزرگ و کوچک int valid_name123; // ✅ حروف، زیرخط و اعداد int _valid; // ✅ شروع با زیرخط مجاز است
نام متغیر نمیتواند با عدد شروع شود:
int 1invalid; // ❌ خطا: شروع با عدد int 2test; // ❌ خطا: شروع با عدد int valid1; // ✅ عدد در انتها مجاز است
C یک زبان Case-Sensitive است؛ یعنی myVar و myvar و MYVAR سه متغیر کاملاً متفاوت هستند :
int myVar = 10; int myvar = 20; int MYVAR = 30; printf("%d %d %d", myVar, myvar, MYVAR); // خروجی: 10 20 30
کلمات کلیدی زبان C (مانند int, return, if, while و غیره) را نمیتوان بهعنوان نام متغیر استفاده کرد:
int int; // ❌ خطا: int کلمهٔ کلیدی است float return; // ❌ خطا: return کلمهٔ کلیدی است char if; // ❌ خطا: if کلمهٔ کلیدی است int main; // ❌ خطا (تکنیکی): main یک تابع خاص است
کاراکترهایی مانند -, @, #, $, %, & و فاصله در نام متغیرها مجاز نیستند:
int my-var; // ❌ خطا: استفاده از خط تیره int my@var; // ❌ خطا: استفاده از @ int my var; // ❌ خطا: وجود فاصله int my_var; // ✅ زیرخط مجاز است
این اصول اگرچه توسط کامپایلر اجباری نیستند، اما رعایت آنها کد را حرفهایتر، خواناتر و قابلنگهداریتر میکند :
نام متغیر باید بهخوبی نشاندهندهٔ محتوا و کاربرد آن باشد:
// ❌ نامهای بد (غیرمعنادار) int a, b, c; float x1, x2, x3; // ✅ نامهای خوب (معنادار) int student_count; float temperature_celsius; char first_initial;
چندین روش رایج برای نوشتن نامهای مرکب وجود دارد:
camelCase: studentCount, totalPrice, firstName
snake_case: student_count, total_price, first_name
PascalCase: StudentCount, TotalPrice, FirstName
// روش camelCase (رایج در برنامهنویسی C برای متغیرهای محلی) int studentCount = 30; float totalPrice = 99.99; // روش snake_case (رایج در کدهای سیستمی و هسته لینوکس) int student_count = 30; float total_price = 99.99;
نکته حرفهای: در جامعهٔ برنامهنویسی C، استفاده از snake_case برای متغیرها و توابع رایجتر است، اما بسیاری از برنامهنویسان از camelCase نیز استفاده میکنند. مهم این است که در یک پروژه، یک روش ثابت را انتخاب کنید .
متغیرهای ثابت (const) معمولاً با حروف بزرگ و زیرخط نوشته میشوند:
const int MAX_STUDENTS = 100; const float PI = 3.14159; const char NEWLINE = '\n';
در برخی پروژهها، از پیشوندها برای نشان دادن نوع یا کاربرد متغیر استفاده میشود:
int i_counter; // i_ پیشوند برای شمارندهها float f_temperature; // f_ پیشوند برای متغیرهای float char c_grade; // c_ پیشوند برای متغیرهای char int *p_ptr; // p_ پیشوند برای پوینترها
بهجز موارد خاص (مانند شمارندههای حلقه)، از نامهای کوتاه و مبهم خودداری کنید:
// ❌ نامهای مبهم int cnt, tmp, val, sz; // ✅ نامهای واضح int counter, temp, value, size;
در حلقههای کوچک، استفاده از متغیرهای یک حرفی مانند i, j, k (برای شمارندهها) یک قرارداد قدیمی و قابلقبول است:
for (int i = 0; i < 10; i++) { // i بهعنوان شمارنده قابلقبول است printf("%d", i); }
استاندارد C حداقل ۳۱ کاراکتر معنیدار برای نام متغیرهای خارجی (External) و ۶۳ کاراکتر برای نامهای داخلی (Internal) تضمین میکند. در عمل، کامپایلرهای مدرن معمولاً نامهای بسیار طولانیتر (تا ۲۵۵ یا ۱۰۲۴ کاراکتر) را پشتیبانی میکنند :
// این نام بسیار طولانی کار میکند، اما خوانایی پایینی دارد int this_is_a_very_long_variable_name_that_is_hard_to_read_and_should_be_avoided; // بهتر است از نامهای کوتاهتر و معنادار استفاده شود int student_grade_average_score;
نکته: اگرچه طول نام محدودیت عملی چندانی ندارد، اما نامهای بسیار طولانی (بیش از ۳۰-۴۰ کاراکتر) خوانایی را کاهش میدهند و باید از آنها پرهیز کرد .
علاوه بر کلمات کلیدی استاندارد C، برخی نامهای دیگر نیز توصیه نمیشود:
auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while
نام توابع و متغیرهای کتابخانهای استاندارد (مانند printf, scanf, malloc, NULL و غیره) نیز نباید استفاده شوند، هرچند کامپایلر ممکن است خطا ندهد، اما باعث ایجاد ابهام در کد میشود:
int printf = 10; // ❌ اگرچه کامپایل میشود، اما بسیار بد است char *malloc = NULL; // ❌ نام یک تابع استاندارد را اشغال میکند
#include <stdio.h> int main() { // متغیرهای با نامهای معنادار int student_id = 12345; char student_name[50] = "Ali Rezaei"; float student_gpa = 18.5; int semester = 3; int is_graduated = 0; // 0 = false, 1 = true printf("Student ID: %d\n", student_id); printf("Name: %s\n", student_name); printf("GPA: %.2f\n", student_gpa); printf("Semester: %d\n", semester); printf("Graduated: %s\n", is_graduated ? "Yes" : "No"); return 0; }
#include <stdio.h> int main() { // نامهای واضح برای متغیرهای مالی float opening_balance = 1000.00; float monthly_deposit = 200.00; float monthly_withdrawal = 50.00; float annual_interest_rate = 0.035; // 3.5% int months = 12; // محاسبهٔ موجودی نهایی float final_balance = opening_balance; for (int month = 1; month <= months; month++) { final_balance += monthly_deposit; final_balance -= monthly_withdrawal; final_balance *= (1 + annual_interest_rate / 12); } printf("Opening Balance: %.2f\n", opening_balance); printf("Monthly Deposit: %.2f\n", monthly_deposit); printf("Monthly Withdrawal: %.2f\n", monthly_withdrawal); printf("Final Balance after %d months: %.2f\n", months, final_balance); return 0; }
#include <stdio.h> // استفاده از snake_case برای توابع و متغیرها (سبک لینوکس) int calculate_average_score(int scores[], int array_size) { int total_sum = 0; int average_result = 0; for (int index = 0; index < array_size; index++) { total_sum += scores[index]; } if (array_size > 0) { average_result = total_sum / array_size; } return average_result; } int main() { int student_scores[] = {85, 90, 78, 92, 88}; int scores_count = 5; int avg_score = calculate_average_score(student_scores, scores_count); printf("Average Score: %d\n", avg_score); return 0; }
int 1st_place = 10; // ❌ خطا int first_place = 10; // ✅ صحیح
int my variable = 10; // ❌ خطا int my_variable = 10; // ✅ صحیح
int student@id = 123; // ❌ خطا int student_id = 123; // ✅ صحیح
int if = 10; // ❌ خطا int condition = 10; // ✅ صحیح
int temp, temp2, temp3; // ❌ گیجکننده int temperature, humidity, pressure; // ✅ واضح
int O = 0; // ❌ O (حرف) و 0 (صفر) ممکن است اشتباه شوند int zero = 0; // ✅ واضحتر
نام متغیرها باید با حرف یا زیرخط شروع شوند و شامل حروف، اعداد و زیرخط باشند
C حساس به بزرگ و کوچکی است (myVar ≠ myvar)
از کلمات کلیدی زبان C بهعنوان نام متغیر استفاده نکنید
نامهای معنادار و توصیفی انتخاب کنید تا کد خوانا باشد
از یک سبک ثابت (camelCase یا snake_case) در کل پروژه پیروی کنید
ثابتها را معمولاً با حروف بزرگ و زیرخط بنویسید
از نامهای بسیار طولانی (بیش از ۳۰-۴۰ کاراکتر) خودداری کنید
از کاراکترهای خاص (مانند -, @, #, $ و فاصله) در نامها استفاده نکنید
نام توابع و متغیرهای استاندارد کتابخانه را تغییر ندهید یا برای متغیرهای خود استفاده نکنید
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات