خانه (C Home)
خوشآمدید به دنیایِ زبانِ C: مادرِ زبانهایِ برنامهنویسی 🏰🏛️
زبانِ C یکی از قدیمیترین، قدرتمندترین و تاثیرگذارترین زبانهایِ تاریخ است. اگر به درونِ هر سیستمعامل، مرورگر، دیتابیس یا کنسولِ بازی نفوذ کنید، محال است که اثری از کدهایِ C پیدا نکنید.
چرا زبانِ C را یاد بگیریم؟
- کنترلِ کامل: شما به حافظهیِ سیستم و پردازنده دسترسیِ مستقیم دارید.
- سرعتِ بینظیر: برنامههایِ نوشته شده با C بسیار سریع هستند و کمترین مصرفِ منابع را دارند.
- پایه و اساس: مفاهیمی که در C یاد میگیرید (مثل اشارهگرها و مدیریت حافظه) درکِ شما را از تمامِ زبانهایِ مدرن مثل C++, Java و Python دگرگون میکند.
جایگاهِ C در صنعتِ امروز
با وجودِ گذشتِ دههها، C همچنان زبانِ اول در حوزههایِ حساس است:
- سیستمهایِ نهفته (Embedded Systems): بردهایِ الکترونیکی، یخچالهایِ هوشمند و پهپادها.
- هستهیِ سیستمعاملها: لینوکس، ویندوز و macOS همگی با C نوشته شدهاند.
- اینترنتِ اشیاء (IoT): دستگاههایِ کوچکی که به اینترنت وصل میشوند.
نقشِ تاریخی C:
زبان C در اوایلِ دههیِ ۷۰ میلادی در آزمایشگاههایِ AT&T Bell توسطِ دنیس ریچی ساخته شد تا سیستمعامل یونیکس (Unix) را بازنویسی کنند. از آن زمان به بعد، دنیایِ دیجیتال به این زبان مدیون است.
بخش تخصصی: کالبدشکافیِ اجرایِ یک برنامه C 🛠️⚙️⚡
زبانِ C زبانِ نزدیک به سختافزار است. درکِ اینکه چطور کدهایِ متنیِ شما به سیگنالهایِ الکتریکی در CPU تبدیل میشوند، اولین قدم برایِ تبدیل شدن به یک مهندسِ حرفهای است.
۱. خطِ لوله (Pipeline) کامپایل
فرایندِ تبدیل کدِ C به فایلِ اجرایی (Executable) چهار مرحلهیِ حیاتی دارد:
- پیشپردازش (Preprocessing): دستوراتی که با
#شروع میشوند (مثل#include) پردازش میشوند. کدهایِ هدر به فایلِ اصلی چسبانده میشوند. - کامپایل (Compilation): کدهایِ سطحِ بالایِ C به زبانِ اسمبلی (Assembly) تبدیل میشوند که برایِ معماریِ آن CPU خاص (مثل x86 یا ARM) قابل فهم باشد.
- اسمبلی (Assembly): کدهایِ اسمبلی به کدهایِ ماشین (Binary) تبدیل میشوند. نتیجه یک فایلِ
.objیا.oاست. - لینک کردن (Linking): تمامِ فایلهایِ آبجکت و کتابخانههایِ استاندارد (مثل
stdio.h) به هم متصل میشوند تا یک فایلِ نهایی (مثل.exe) ساخته شود.
۲. ساختارِ حافظه در زمانِ اجرا (Runtime Memory)
وقتی برنامهیِ شما اجرا میشود، از چهار بخشِ اصلی در حافظه استفاده میکند:
- Text Segment: محلِ نگهداریِ دستوراتِ اجراییِ برنامه (کدهای ماشین).
- Data Segment: برایِ نگهداریِ متغیرهایِ سراسری (Global) و استاتیک.
- Stack: برایِ نگهداریِ متغیرهایِ محلی و پارامترهایِ توابع مدیریت میشود. این بخش سریع است اما فضایِ محدودی دارد.
- Heap: برایِ مدیریتِ حافظهیِ داینامیک (که با
mallocرزرو میکنید). این بزرگترین بخشِ حافظهیِ در دسترس است.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
در زبان C، برای چاپ یک رشته از تابع printf استفاده میشود. برنامهای بنویسید که عبارت Hello C را چاپ کند. (فراموش نکنید که به #include <stdio.h> نیاز دارید)
#include <stdio.h>
int main() {
printf("Hello C");
return 0;
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.