دوره‌ها / آموزش برنامه‌نویسی C / نحو و ساختار (C Syntax)

نحو و ساختار (C Syntax)

20 دقیقه Article

نحو و ساختار (Syntax) در C: قوانینِ بازی ⚖️📜

ساختارِ کدنویسی در C بسیار دقیق و منظم است. یادگیریِ این قوانین باعث می‌شود کدهایی بنویسید که هم گوگل (کامپایلر) و هم انسان‌ها بفهمند!

۱. سمی‌کالن (;): پایانِ جملات

در C، هر دستورِ اجرایی باید با یک ; تمام شود. فراموش کردنِ آن شایع‌ترین دلیلِ خطایِ کامپایل است.

{code_block('printf("Hello");\nint x = 5;')}

۲. آکلاد ها ({ }): بلوک‌بندی

آکلادها نشان‌دهنده‌یِ ابتدا و انتهایِ یک بخش از کد (مثل بدنه‌یِ تابع) هستند. هر چیزی که داخلِ { } قرار بگیرد، متعلق به آن بلوک است.

۳. فضاهایِ خالی (White Spaces):

C به فضاهایِ خالی (اینتر و فاصله) اهمیتی نمی‌دهد. اما برایِ تمیزیِ کد (Readability)، همیشه باید از تورفتگی (Indentation) استفاده کنید.

ترتیبِ اجرا: کامپایلر کدهایِ شما را از بالا به پایین و خط به خط می‌خواند. پس همیشه باید توابع یا متغیرها را قبل از استفاده، تعریف (Declare) کنید.
کلماتِ رزرو شده (Keywords): کلماتی مثل int, if, return در C معنایِ خاصی دارند. شما نمی‌توانید از آن‌ها به عنوانِ نامِ متغیر استفاده کنید. کلاً ۳۲ کلمه‌یِ کلیدیِ اصلی در استانداردِ قدیمیِ C وجود دارد.

مقایسه کدِ تمیز و کثیف:

کدِ کثیف (ولی درست): int main(){printf("Hi");return 0;}

کدِ تمیز: همیشه از خطوطِ جداگانه برایِ خواناییِ کدِ خود استفاده کنید.

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

بخش تخصصی: کالبدشکافیِ اجرایِ یک برنامه C 🛠️⚙️⚡

زبانِ C زبانِ نزدیک به سخت‌افزار است. درکِ اینکه چطور کدهایِ متنیِ شما به سیگنال‌هایِ الکتریکی در CPU تبدیل می‌شوند، اولین قدم برایِ تبدیل شدن به یک مهندسِ حرفه‌ای است.

۱. خطِ لوله (Pipeline) کامپایل

فرایندِ تبدیل کدِ C به فایلِ اجرایی (Executable) چهار مرحله‌یِ حیاتی دارد:

  • پیش‌پردازش (Preprocessing): دستوراتی که با # شروع می‌شوند (مثل #include) پردازش می‌شوند. کدهایِ هدر به فایلِ اصلی چسبانده می‌شوند.
  • کامپایل (Compilation): کدهایِ سطحِ بالایِ C به زبانِ اسمبلی (Assembly) تبدیل می‌شوند که برایِ معماریِ آن CPU خاص (مثل x86 یا ARM) قابل فهم باشد.
  • اسمبلی (Assembly): کدهایِ اسمبلی به کدهایِ ماشین (Binary) تبدیل می‌شوند. نتیجه یک فایلِ .obj یا .o است.
  • لینک کردن (Linking): تمامِ فایل‌هایِ آبجکت و کتابخانه‌هایِ استاندارد (مثل stdio.h) به هم متصل می‌شوند تا یک فایلِ نهایی (مثل .exe) ساخته شود.

۲. ساختارِ حافظه در زمانِ اجرا (Runtime Memory)

وقتی برنامه‌یِ شما اجرا می‌شود، از چهار بخشِ اصلی در حافظه استفاده می‌کند:

  1. Text Segment: محلِ نگهداریِ دستوراتِ اجراییِ برنامه (کدهای ماشین).
  2. Data Segment: برایِ نگهداریِ متغیرهایِ سراسری (Global) و استاتیک.
  3. Stack: برایِ نگهداریِ متغیرهایِ محلی و پارامترهایِ توابع مدیریت می‌شود. این بخش سریع است اما فضایِ محدودی دارد.
  4. Heap: برایِ مدیریتِ حافظه‌یِ داینامیک (که با malloc رزرو می‌کنید). این بزرگترین بخشِ حافظه‌یِ در دسترس است.
نکته مهندسی: در C هیچ "Garbage Collector"ای وجود ندارد! برخلافِ پایتون یا جاوا، مدیریتِ هر بیت از حافظه بر عهده‌یِ شماست. این قدرتِ مطلق، مسئولیتِ بزرگی هم به همراه دارد (جلوگیری از Memory Leak).

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

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

خطای سمی‌کالن Easy
سوال تمرین

در کد زیر یک سمی‌کالن (;) جا افتاده است. آن را اصلاح کنید تا کد به درستی چاپ شود.

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

int main() {
  printf("Fix me");
  return 0;
}

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

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