C: إعداد بيئة التطوير
إعداد بيئة التطوير أشبه بتجهيز المطبخ — حين يكون الموقد (المترجم) والأدوات (المحرّر) في مكانهم، يمكنك أخيرًا البدء بالطبخ (كتابة الشفرة).
1. تثبيت مترجم GCC
GCC (GNU Compiler Collection) هو أشهر مترجم للغة C — مجاني ويعمل على جميع المنصات. تحتاج إلى تثبيته قبل أن تتمكن من ترجمة شفرة C إلى برنامج تنفيذي.
(1) التثبيت على Windows
على Windows، نوصي بتثبيت MinGW-w64 أو MSYS2، وكلاهما يوفّر نسخة من GCC لنظام Windows.
الخيار 1: MinGW-w64 (موصى به للمبتدئين)
- زر https://www.mingw-w64.org ونزّل المثبّت
- أثناء التثبيت، اختر بنية
x86_64ونموذج المساراتwin32 - أضف مجلد
binفي مسار التثبيت إلى متغير البيئةPATHفي النظام
الخيار 2: MSYS2 (أكثر مرونة)
pacman -S mingw-w64-x86_64-gcc
بعد التثبيت، افتح موجه الأوامر وتحقق:
gcc --version
إذا رأيت رقم إصدار، فقد نجح التثبيت.
(2) التثبيت على macOS
لا يأتي macOS مع GCC، لكن يمكنك تثبيته عبر Homebrew:
brew install gcc
أمر cc المدمج في macOS يستدعي فعليًا مترجم Clang، الذي يمكنه أيضًا ترجمة شفرة C. للتأكد:
cc --version
(3) التثبيت على Linux
معظم توزيعات لينكس تتيح لك تثبيت GCC مباشرة عبر مدير الحزم:
sudo apt install gcc
تحقّق من التثبيت:
gcc --version
gcc طوال الوقت.
2. ضبط VS Code
VS Code هو محرّر أكواد مجاني من Microsoft — خفيف وغني بالامتدادات، ما يجعله خيارًا ممتازًا لكتابة شفرة C.
(1) تثبيت VS Code
اذهب إلى https://code.visualstudio.com للتنزيل والتثبيت.
(2) تثبيت الامتدادات الأساسية
افتح VS Code، اضغط Ctrl+Shift+X لفتح سوق الامتدادات، ثم ابحث عن وثبّت:
| الامتداد | الغرض |
|---|---|
| C/C++ (Microsoft) | تلوين الصياغة، الإكمال الذكي، دعم التنقيح |
| Code Runner (Jun Han) | تشغيل الشفرة بنقرة واحدة — اضغط Ctrl+Alt+N للتنفيذ |
(3) ضبط امتداد C/C++
اضغط Ctrl+Shift+P، اكتب C/C++: Edit Configurations (UI)، وتأكد من صحة الإعدادات التالية:
- مسار المترجم: أدخل مسار تثبيت GCC، مثلاً
C:/mingw64/bin/gcc.exe - وضع IntelliSense: اختر
gcc-x64 - معيار C: اختر
c99
(4) ضبط التشغيل بنقرة واحدة
بعد تثبيت Code Runner، اضغط Ctrl+Alt+N لتشغيل ملف C الحالي. إذا كنت تفضل التشغيل يدويًا في الطرفية، يمكنك أيضًا استخدام سطر الأوامر مباشرة.
c-learn) وافتح المجلد بالكامل بدلًا من ملف واحد. هذا يضمن عمل الامتدادات بشكل صحيح.
3. أول برنامج: Hello World
▶ مثال
#include <stdio.h>
int main(void) {
printf("مرحباً بالعالم!\n");
return 0;
}
مرحباً بالعالم!
شرح سطر بسطر:
#include <stdio.h>— يخبر المترجم بتضمين ملف رأس الإدخال/الإخراج القياسي، حيث صُرّح عن printfint main(void)— يعرّف الدالة الرئيسية، نقطة دخول البرنامج.intتعني أنها تُرجع عددًا صحيحًا،voidتعني أنها لا تأخذ مُعاملاتprintf("مرحباً بالعالم!\n")— يستدعي دالة الإخراج المنسّق؛\nهو محرف السطر الجديدreturn 0— يُرجع 0 للإشارة إلى أن البرنامج انتهى بشكل طبيعي
4. خطوات الترجمة والتنفيذ
C هي لغة مترجمة — الشفرة لا يمكن تشغيلها مباشرة؛ يجب ترجمتها أولًا إلى شفرة آلية. الخطوات الكاملة تبدو هكذا:
الشفرة المصدرية (.c) → المعالجة الأولية → الترجمة → التجميع → الربط → ملف تنفيذي
(1) تعليمات خطوة بخطوة
الخطوة 1: كتابة الملف المصدري
أنشئ ملفًا جديدًا باسم hello.c في VS Code، اطبع شفرة Hello World أعلاه، واحفظه.
الخطوة 2: الترجمة
gcc -o hello hello.c
gcc— يستدعي المترجم-o hello— يحدد اسم ملف المخرجات كـhello(على Windows، يُضاف.exeتلقائيًا)hello.c— الملف المصدري المطلوب ترجمته
الخطوة 3: التشغيل
./hello
على Windows:
hello.exe
(2) الترجمة خطوة بخطوة
إذا كنت تريد فهم كل مرحلة من مراحل الترجمة، يمكنك تشغيلها منفصلة:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello
| المرحلة | العلم | المخرجات | الوصف |
|---|---|---|---|
| المعالجة الأولية | -E |
ملف .i |
يوسّع وحدات الماكرو، يعالج #include، يزيل التعليقات |
| الترجمة | -S |
ملف .s |
يترجم الشفرة المعالجة إلى لغة التجميع |
| التجميع | -c |
ملف .o |
يترجم لغة التجميع إلى شفرة آلية (ملف كائني) |
| الربط | لا علم خاص | ملف تنفيذي | يدمج الملفات الكائنية والمكتبات في البرنامج النهائي |
gcc -o hello hello.c هو كل ما تحتاجه. الترجمة خطوة بخطوة مفيدة بشكل رئيسي لفهم العملية أو استكشاف المشكلات.
(3) أعلام المترجم الشائعة
| العلم | الغرض | مثال |
|---|---|---|
-o |
تحديد اسم ملف المخرجات | gcc -o prog main.c |
-Wall |
تفعيل جميع التحذيرات الشائعة | gcc -Wall -o prog main.c |
-Wextra |
تفعيل تحذيرات إضافية | gcc -Wextra -o prog main.c |
-std=c99 |
تحديد معيار C | gcc -std=c99 -o prog main.c |
-g |
توليد معلومات التنقيح | gcc -g -o prog main.c |
-O2 |
مستوى تحسين 2 | gcc -O2 -o prog main.c |
gcc -Wall -Wextra -std=c99 -o prog main.c. التحذيرات هي أصدقاؤك — تساعدك في كشف العديد من الأخطاء المحتملة.
5. أخطاء الترجمة الشائعة
كمبتدئ، ستواجه أخطاء ترجمة. لا تهلع — تعلّم قراءة رسائل الخطأ أهم من تجنّب الأخطاء.
(1) نسيان الفاصلة المنقوطة
#include <stdio.h>
int main(void) {
printf("مرحباً بالعالم!\n")
return 0;
}
hello.c:4:33: error: expected ';' before 'return'
رسالة الخطأ تخبرك: اسم الملف:السطر:العمود: وصف الخطأ. هنا، نسيان فاصلة منقوطة في نهاية السطر 4.
(2) مُعرّف غير مُصرّح عنه
#include <stdio.h>
int main(void) {
print("مرحباً بالعالم!\n");
return 0;
}
hello.c:4:5: warning: implicit declaration of function 'print'
كتبت print بدلًا من printf — المترجم لا يتعرف على هذه الدالة. راجع التهجئة فقط.
(3) نسيان ملف الرأس
int main(void) {
printf("مرحباً بالعالم!\n");
return 0;
}
hello.c:2:5: warning: implicit declaration of function 'printf'
نسيت #include <stdio.h>، لذا المترجم لا يعرف تعريف printf.
(4) أقواس غير متطابقة
#include <stdio.h>
int main(void) {
printf("مرحباً بالعالم!\n");
return 0;
}
hello.c:5:1: error: expected declaration or statement at end of input
بينما تبدو هذه الشفرة صحيحة، إذا حذفتَ } بالخطأ أثناء الكتابة، ستحصل على هذا النوع من الأخطاء. المترجم يخبرك "هناك شيء ناقص في نهاية الملف" — عادةً قوس غير مغلق.
6. تنظيم ملفات المشروع
مع تعقّد برامجك، من الجيد تنظيم ملفاتك هكذا:
c-learn/
├── ch02/
│ └── hello.c
├── ch03/
│ └── syntax.c
└── ch04/
└── variables.c
مجلد واحد لكل فصل، أسماء ملفات إنجليزية بأحرف صغيرة، وأسماء تصف المحتوى بوضوح.
❓ أسئلة شائعة
📖 ملخص
- GCC هو أشهر مترجم لـ C مستخدمًا — استخدم MinGW-w64/MSYS2 على Windows، و Homebrew على macOS، و apt على Linux
- VS Code مع امتداد C/C++ وامتداد Code Runner يوفّر بيئة تطوير C خفيفة وفعّالة
- يمر برنامج C بأربع مراحل من الشفرة المصدرية إلى الملف التنفيذي: المعالجة الأولية ← الترجمة ← التجميع ← الربط
- رجّم دائمًا باستخدام
gcc -Wall -Wextra -std=c99واعتد على قراءة التحذيرات - رسائل خطأ الترجمة تتضمن اسم الملف ورقم السطر والوصف — تعلّم قراءتها هي مهارة أساسية
📝 تمارين
- ثبّت GCC على حاسوبك وتحقق باستخدام
gcc --version؛ سجّل رقم الإصدار - اكتب برنامجًا يُخرج اسمك وتحية (مثلاً "مرحبًا، أنا أحمد، وأنا أتعلّم لغة C!")، ثم رجّمه وشغّله
- أنشئ عمدًا 3 أخطاء ترجمة (نسيان فاصلة منقوطة، اسم دالة خاطئ، نسيان ملف رأس)، سجّل رسائل خطأ المترجم، وتمرّن على قراءة مخرجات الخطأ