در برنامهنویسی، سینتکس (Syntax) یا نحو به مجموعه قواعدی گفته میشود که ساختار یک زبان را تعریف میکنند. سینتکس در واقع همان گرامر و دستور زبانِ کدنویسی است — ترکیب مشخصی از نمادها، کلمات کلیدی و علائم نگارشی که کامپایلر آنها را درک میکند. اگر از قوانین سینتکس تخطی کنید، کامپایلر خطایی صادر کرده و از ساخت (Compile) برنامه شما خودداری میکند.
زبان C دارای سینتکسی نسبتاً ساده اما دقیق و سختگیرانه است. زمانی که ساختار پایه آن را درک کنید، میتوانید تقریباً هر برنامه C را بخوانید و بنویسید.
هر برنامه C از یک الگوی عمومی پیروی میکند. در ادامه ساختار حداقل (کمینه) یک برنامه را میبینید:
#include <stdio.h>
int main() {
// کد شما اینجا قرار میگیرد
return 0;
}
اجزای مختلف آن را بررسی کنیم:
| بخش | هدف / کاربرد | مثال |
| دستور پیشپردازنده (Preprocessor Directive) | کتابخانهها یا فایلهای هدر خارجی را قبل از کامپایل وارد برنامه میکند | #include <stdio.h> |
| تعریف تابع (Function Definition) | بلاکی از کد را تعریف میکند که وظیفه خاصی را انجام میدهد | int main() { ... } |
| بدنه (Body) | دستورات اصلی داخل آکولادها { } | printf("Hello"); |
| دستور بازگشت (Return Statement) | مقداری را به سیستمعامل بازمیگرداند | return 0; |
نکته حرفهای: وجود تابع
main()در هر برنامه قابلاجرا در C اجباری است. اجرای برنامه بدون آن امکانپذیر نیست.
یک دستور (Statement) یک فرمان کامل است که به کامپیوتر میگوید کاری را انجام دهد. در C، دستورات معمولاً با نقطهویرگول (Semicolon یا ;) پایان مییابند. کامپایلر دستورات را به ترتیب از بالا به پایین اجرا میکند، مگر اینکه با دستورات کنترل روند (Control Flow)، این ترتیب را تغییر دهید.
۱. دستورات تعریف (Declaration Statements)
این دستورات متغیرها را ایجاد (اعلام) میکنند.
int age; // یک متغیر صحیح به نام 'age' تعریف میکند
float price; // یک متغیر اعشاری به نام 'price' تعریف میکند
char letter; // یک متغیر کاراکتری به نام 'letter' تعریف میکند
میتوانید متغیر را تعریف و همزمان مقداردهی اولیه (Assign) کنید:
int age = 25;
float price = 19.99;
char letter = 'A';
۲. دستورات انتساب (Assignment Statements)
این دستورات مقداری را به متغیری که قبلاً تعریف شده تخصیص میدهند.
age = 30; // مقدار ۳۰ را به متغیر 'age' اختصاص میدهد
price = 45.50; // مقدار ۴۵.۵۰ را به 'price' اختصاص میدهد
۳. دستورات عبارتی (Expression Statements)
هر عبارتی که بعد از آن یک ; قرار گیرد تبدیل به یک دستور میشود. این موارد شامل عملیات ریاضی یا فراخوانی توابع هستند.
x = y + 5; // عبارت محاسباتی
printf("Hello"); // عبارت فراخوانی تابع
result = a * b / c; // عبارت محاسباتی complex
۴. دستورات کنترل روند (Control Flow Statements)
این دستورات مسیر اجرای کد را تغییر میدهند. بعداً به تفصیل به آنها خواهیم پرداخت، اما در ادامه یک پیشنمایش میبینید:
if (x > 10) { // دستور شرطی
printf("x بزرگ است");
}
for (i = 0; i < 5; i++) { // دستور حلقه
printf("%d ", i);
}
۵. دستورات بازگشت (Return Statements)
این دستورات از تابع خارج شده و در صورت لزوم مقداری را بازمیگردانند.
return 0; // از main() خارج شده و مقدار ۰ را برمیگرداند
return result; // از تابع خارج شده و مقدار متغیر 'result' را برمیگرداند
هر دستور در C باید با یک نقطهویرگول (;) ختم شود. نقطهویرگول به کامپایلر میگوید که یک دستور به پایان رسیده و دستور بعدی در حال آغاز است.
int a = 5; // درست
printf("Hi"); // درست
int b = 10 // خطایی: نقطهویرگول فراموش شده است
⚠️ خطای رایج: فراموش کردن نقطهویرگول، متداولترین خطای سینتکسی در میان مبتدیان است. هرگاه با خطایی مانند
expected ';' before '}'مواجه شدید، خط بالای آکولاد بسته را بررسی کنید.
زبان C به فضای خالی (فاصلهها، تبها و خطوط جدید) حساس نیست. شما میتوانید کد خود را به سبکهای مختلفی بنویسید:
// همه در یک خط (معتبر اما غیرقابل خواندن)
#include <stdio.h> int main() { printf("Hello"); return 0; }
// فرمت استاندارد و خوانا
#include <stdio.h>
int main() {
printf("Hello");
return 0;
}
// قالببندی غیرمعمول اما معتبر
#include <stdio.h>
int
main
(
)
{
printf("Hello");
return 0;
}
نکته حرفهای: اگرچه رعایت فضاهای خالی اجباری نیست، اما دندانهدار کردن (Indentation) و فاصلهگذاری مناسب، کد شما را بسیار خوانا و قابل نگهداری میکند. همیشه از یک فرمت منظم و یکدست استفاده کنید.
کامنتها متنهایی هستند که کامپایلر آنها را نادیده میگیرد. آنها صرفاً برای مستندسازی کد توسط برنامهنویسان استفاده میشوند. زبان C از دو نوع کامنت پشتیبانی میکند:
| سبک کامنت | سینتکس | مورد استفاده |
| تکخطی | // این یک کامنت است | توضیحات کوتاه در یک خط |
| چندخطی | /* این یک کامنت چندخطی است */ | توضیحات طولانیتر یا غیرفعال کردن موقت بخشی از کد |
#include <stdio.h>
int main() {
// این دستور پیامی را در صفحه چاپ میکند
printf("Hello World!");
/*
این بلاک کد مجموع دو عدد را محاسبه میکند.
در حال حاضر کامنت شده و اجرا نمیشود.
*/
// int sum = 5 + 10;
// printf("Sum: %d", sum);
return 0;
}
زبان C به حروف کوچک و بزرگ حساس است (Case-sensitive). این یعنی myVar ،myvar و MYVAR سه شناسه کاملاً متفاوت هستند و کامپایلر با آنها به عنوان متغیرهای مجزا رفتار میکند.
int age = 25;
int Age = 30;
int AGE = 35;
// متغیرهای 'age'، 'Age' و 'AGE' سه متغیر متفاوت هستند
// و هر کدام میتوانند مقادیر کاملاً مستقلی را نگهداری کنند
توجه ویژه برای کلمات کلیدی: کلمات کلیدی در C همیشه با حروف کوچک نوشته میشوند. به عنوان مثال:
| درست | نادرست |
int | Int, INT |
return | Return, RETURN |
if | If, IF |
for | For, FOR |
⚠️ بسیار مهم: نام تابع
printfنیز به حروف کوچک و بزرگ حساس است. استفاده ازPrintf،PRINTFیاprintFباعث خطایundefined reference(عدم شناسایی) خواهد شد.
درک تفاوت این دو نوع خطا بسیار حیاتی است:
| نوع خطا | تعریف | نحوه تشخیص |
| خطای سینتکسی (Syntax Error) | نقض قوانین گرامری C | کامپایلر آن را تشخیص داده و از ساخت برنامه جلوگیری میکند |
| خطای منطقی (Logic Error) | برنامه کامپایل و اجرا میشود اما نتیجه نادرست تولید میکند | نیاز به تست، بررسی و دیباگ (Debugging) دارد |
// خطای سنتکسی: فراموش شدن نقطهویرگول
int x = 10
printf("%d", x);
// خطای سنتکسی: عبارت 'Printf' تعریف نشده است (حساسیت به حروف)
Printf("Hello");
// خطای منطقی: بدون خطا کامپایل میشود اما نتیجه اشتباه است
int a = 5;
int b = 3;
int result = a * b; // قرار بود جمع انجام شود نه ضرب (a + b)
printf("Sum: %d", result); // به جای عدد ۸، مقدار ۱۵ را چاپ میکند
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات