C: مقدمة في لغة C

تعلّم لغة C أشبه بتعلّم قيادة سيارة يدوية — صعبة في البداية مقارنة بالأوتوماتيك، لكنك حين تتقنها تحصل على تحكّم دقيق في كل ترس وتفهم حقًا كيف تعمل الآلة.

1. ما هي لغة C

أُنشئت لغة C عام 1972 على يد دينيس ريتشي في مختبرات بل لتطوير نظام التشغيل UNIX. وهي لغة برمجة أغراض عامة وإجرائية تجمع بين التعبيرية المنظمة للغات عالية المستوى والتحكّم المباشر في العتاد الذي تتميّز به اللغات منخفضة المستوى.

ببساطة، لغة C هي جسر بين المبرمج وعتاد الحاسوب. تكتب الشفرة بصياغة مقروءة بشريًا، ويقوم مترجم C بتحويلها إلى تعليمات يمكن للآلة تنفيذها.

(1) أصول لغة C

قبل C، كانت أنظمة التشغيل تُكتب بشكل رئيسي بلغة التجميع (assembly). لغة التجميع ترتبط مباشرة بتعليمات المعالج — البرامج الناتجة سريعة، لكنها ضعيفة القراءة وغير قابلة للنقل. انتقل إلى معالج مختلف، وعليك إعادة كتابة كل شيء.

كان دينيس ريتشي يعمل على تطوير نظام التشغيل UNIX آنذاك واحتاج أداة قادرة على معالجة العتاد بكفاءة لغة التجميع مع تقديم قابلية القراءة والنقل التي تتميّز بها اللغات عالية المستوى. وُلدت C من تلك الحاجة.

شجرة عائلة C تبدو هكذا:

TEXT 📖 للعرض فقط
ALGOL 60 (1960)
  → BCPL (1967, Martin Richards)
    → B (1970, Ken Thompson)
      → C (1972, Dennis Ritchie)

كانت B سابقة على C، لكنها كانت محدودة جدًا — كانت تمتلك نوع بيانات واحد فقط (word)، ما لم يلبي متطلبات تطوير UNIX. بنى ريتشي على B بإضافة نظام أنواع ومزيد من الميزات، ليُنشئ في النهاية لغة C.

(2) العلاقة التكافلية بين C و UNIX

نجّح كل من C و UNIX بعضهما البعض: ما إن أُعيدت كتابة UNIX بلغة C حتى أصبحت قابلة للنقل؛ وانتشرت C على نطاق واسع بفضل شعبية UNIX. هذه العلاقة التكافلية هي أحد الأسباب الرئيسية لنجاح C. حتى اليوم، نواة لينكس (وهي مشتقة من UNIX) لا تزال مكتوبة بالكامل بلغة C — وهذا ربما أفضل دليل على قدراتها.


2. لماذا تتعلم C

قد تتساءل: مع وجود لغات "سهلة الاستخدام" مثل Python و JavaScript، لماذا أتعب نفسي مع C؟

💡 نصيحة: الهدف من تعلّم C ليس بناء مواقع الويب — بل اكتساب المعرفة منخفضة المستوى لفهم كيف يعمل كل شيء تحت السطح.


3. ما الذي يمكن أن تفعله C

مجالات تطبيق C أوسع مما قد تظن:

المجال مشاريع بارزة
أنظمة التشغيل نواة لينكس، نواة Windows، نواة macOS
الأنظمة المدمجة برامج الساعات الذكية، وحدات التحكم الإلكترونية في السيارات، أجهزة إنترنت الأشياء
قواعد البيانات MySQL، PostgreSQL، SQLite
محركات الألعاب نواة Unreal Engine، سلسلة id Tech
المترجمات والمفسّرات GCC، CPython، Lua
البنية التحتية للشبكات Nginx، Redis، Memcached
الرسوم ومعالجة الصور ImageMagick، الوحدات الأساسية لـ OpenCV

هل لاحظت نمطًا؟ الأنظمة التي "يجب أن تعمل بسرعة وألا تنهار" تختار C دائمًا تقريبًا.

(1) دور C في المجالات المختلفة

أنظمة التشغيل: نواة لينكس تحتوي على أكثر من 28 مليون سطر من شفرة C، ونواة Windows الأساسية مكتوبة أيضًا بلغة C. يحتاج نظام التشغيل إلى التحدث مباشرة مع العتاد — إدارة الذاكرة، وجدولة العمليات، ومعالجة المقاطعات. فقط C (أو لغة التجميع) قادرة على فعل ذلك.

الأنظمة المدمجة: الساعة الذكية في معصمك، والموجّه في منزلك، ووحدة التحكم الإلكترونية في سيارتك — هذه الأجهزة تمتلك موارد محدودة للغاية (ربما عشرات الكيلوبايت فقط من الذاكرة). فقط C قادرة على الاستفادة الكفؤة من كل بايت. برمجة Arduino هي في جوهرها برمجة بلغة C.

قواعد البيانات: MySQL و PostgreSQL و SQLite — أكثر ثلاث قواعد بيانات مفتوحة المصدر استخدامًا في العالم — جميعها مكتوبة بلغة C. تتطلب قواعد البيانات أداءً عاليًا جدًا في الإدخال/الإخراج وتحكّمًا دقيقًا في الذاكرة، ما يجعل C الخيار الطبيعي.

محركات الألعاب: بينما تُكتب منطق اللعبة غالبًا بلغة C++ أو لغات برمجية، فإن الطبقة الأعمق من المحرك — خط الأنابيب للعرض، ومحاكاة الفيزياء، وتخصيص الذاكرة — لا تزال تُنفّذ بلغة C لضمان أقصى أداء.

البنية التحتية للشبكات: أكثر من 30% من مواقع الويب حول العالم تعمل على Nginx، و Redis هو المسيطر في مجال التخزين المؤقت. كلاهما مشروعان مكتوبان بلغة C. يجب أن تتعامل خدمات الشبكات مع أعداد ضخمة من الاتصالات المتزامنة، وهنا يتألق تفوق C في الأداء.


4. المميزات الأساسية للغة C

(1) الكفاءة

تُنتج مترجمات C شفرة آلية محسّنة للغاية تعمل بسرعة تقارب لغة التجميع المكتوبة يدويًا. لا يوجد عبء مفسّر كما في Python، ولا طبقة آلة افتراضية كما في Java.

(2) قابلية النقل

يمكن ترجمة نفس شفرة C وتشغيلها على منصات مختلفة (Windows، Linux، macOS، الأنظمة المدمجة) مع تعديلات طفيفة فقط. هذه هي الفلسفة الشهيرة "اكتب مرة، عدّل قليلًا، رجّم في كل مكان".

(3) التحكّم منخفض المستوى

تسمح لك C بالتلاعب المباشر بالذاكرة (عبر المؤشرات)، وإجراء عمليات على مستوى البت، وحتى تضمين لغة التجميع داخل الشفرة. لديك أقصى تحكّم ممكن في العتاد — ما يعني أيضًا أنك مسؤول عن إدارة تخصيص الذاكرة وتحريرها بنفسك.

(4) المصغّرة والبسيطة

تمتلك C فقط 32 كلمة مفتاحية (معيار C89)، وصياغتها بسيطة جدًا. تُفوّض الكثير من القدرات إلى المكتبة القياسية بدلًا من بنائها في اللغة نفسها، ممّا يبقي النواة بسيطة.

⚠️ ملاحظة: هذا سلاح ذو حدين. تمنحك C حرية غير محدودة، لكنها تسلّمك أيضًا كل المسؤولية. لا يوجد جمع تلقائي للقمامة، ولا فحص لحدود المصفوفات، ولا حماية من المؤشرات الفارغة — المترجم لن يمنعك من ارتكاب الأخطاء، لكن برنامجك قد ينهار أثناء التشغيل.

(5) المكتبة القياسية

سمة أخرى من سمات C هي تصميم "لغة صغيرة، مكتبة قياسية كبيرة". اللغة نفسها توفّر فقط أبسط هياكل التحكم وأنواع البيانات، بينما الوظائف مثل الإدخال/الإخراج والعمليات الحسابية ومعالجة السلاسل النصية تُوفَّر من خلال المكتبة القياسية.

تشمل ملفات الرأس الأساسية للمكتبة القياسية لـ C:

ملف الرأس الغرض دوال شائعة
<stdio.h> الإدخال/الإخراج printf، scanf، fopen، fclose
<stdlib.h> أدوات عامة malloc، free، exit، atoi
<string.h> عمليات السلاسل strlen، strcpy، strcmp، strcat
<math.h> الدوال الحسابية sqrt، sin، cos، pow
<ctype.h> تصنيف الأحرف isdigit، isalpha، toupper
<time.h> التعامل مع الوقت time، clock، strftime

تجعل المكتبة القياسية لغة C "جاهزة للاستخدام" — يمكنك إنجاز معظم المهام الشائعة دون تثبيت أي حزم خارجية.


5. تاريخ لغة C

لم تظهر C من العدم — لها مسار تطوّري واضح:

السنة الإصدار الاسم البديل المميزات الرئيسية
1972 K&R C صمّمها دينيس ريتشي؛ حُدّدت بكتاب The C Programming Language لكيرنيغان وريتشي
1989 C89 ANSI C / C90 أول معيار رسمي؛ حدّد المكتبة القياسية ونماذج الدوال وغيرها
1999 C99 أدخل التعليقات //، و inline، والمصفوفات متغيرة الطول، و long long، و <stdbool.h>
2011 C11 أدخل _Generic و _Static_assert والعمليات الذرية ودعم تعدد المسارات
2018 C17 إصلاحات أخطاء بشكل رئيسي؛ لا مميزات جديدة كبرى
2023 C23 أدخل nullptr و true/false ككلمات مفتاحية والأعداد العشرية العشرية
🔥 خطأ شائع: للمبتدئين، C99 هو كل ما تحتاجه. تمتلك توافقية ممتازة ومميزات كافية، ومعظم المترجمات والكتب الدراسية مبنية عليها. يمكنك استكشاف مميزات C11/C17 لاحقًا حسب الحاجة.

(1) لماذا المعايير مهمة

لماذا تحتاج C إلى معيار؟ تخيّل عالمًا بلا معيار: كل مترجم يُنفّذ C بطريقته الخاصة — شفرة تُترجم بنجاح على Windows قد تفشل تمامًا على Linux. المعايير تضمن قابلية نقل الشفرة.

كان ANSI C (C89) أول معيار للغة C. وحّد السلوكيات المتباينة للمترجمات المختلفة وحدّد واجهة المكتبة القياسية. من C89 فصاعدًا، أصبح لدى C "إجابة صحيحة" — يمكن للمبرمجين كتابة الشفرة وفقًا للمعيار بثقة دون القلق بشأن توافقية المترجمات.

(2) منظومة المترجمات

تمتلك C عدة تطبيقات مترجمات ناضجة:

المترجم المُطوّر المنصة الخصائص
GCC مشروع GNU جميع المنصات أشهر مترجم مفتوح المصدر
Clang مشروع LLVM جميع المنصات رسائل خطأ واضحة، ترجمة سريعة
MSVC Microsoft Windows مدمج في Visual Studio
ICC Intel جميع المنصات تحسين ممتاز على معالجات Intel

المترجمات المختلفة يجب أن تتصرف بنفس الطريقة مع شفرة C القياسية (مضمون بالمعيار)، لكن دعم الامتدادات غير القياسية يختلف. GCC أو Clang مناسبان للمبتدئين.


6. C مقابل اللغات الأخرى

الميزة C C++ Java Python
التنفيذ مترجمة إلى شفرة آلية مترجمة إلى شفرة آلية مترجمة إلى bytecode + JIT مفسّرة
السرعة سريعة جدًا سريعة جدًا سريعة بطيئة
إدارة الذاكرة يدوية (malloc/free) يدوية + تلقائية اختياريًا (new/delete/RAII) جمع تلقائي للقمامة جمع تلقائي للقمامة
دعم المؤشرات كاملة كاملة لا مؤشرات أصليّة لا مؤشرات أصليّة
الكائنية التوجه غير مدعومة مدعومة إلزامية متعددة الأنماط
صعوبة التعلّم متوسطة عالية متوسطة منخفضة
الاستخدام النموذجي أنظمة/مدمجة ألعاب/تطبيقات سطح المكتب خلفيات المؤسسات/أندرويد تحليل بيانات/ذكاء اصطناعي/برمجيات

كما يوضح الجدول، تتمتّع C بأفضلية مطلقة في السرعة والتحكّم منخفض المستوى، لكنها أضعف نسبيًا في كفاءة التطوير والسلامة. هذا ليس عيبًا — بل فلسفة تصميم. C تثق بأن المبرمج يعرف ما يفعله.

(1) العلاقة بين C و C++

C++ هي (تقريبًا) مجموعة شاملة من C، تضيف البرمجة كائنية التوجه والقوالب ومعالجة الاستثناءات و STL فوق C. يظن كثيرون خطأً أن C++ هي "ترقية" لـ C، لكن الاثنتين تمتلكان فلسفتي تصميم مختلفتين جذريًا:

الاختيار بين C و C++ يعتمد على مشروعك. تكتب نواة نظام تشغيل أو مشغّلات أو برامج ثابتة مدمجة؟ اختر C. تبني برنامج سطح مكتب كبير أو منطق ألعاب أو خدمات عالية الأداء؟ اختر C++.

(2) متى لا تستخدم C

C ليست الأداة المناسبة لكل شيء. هذه السيناريوهات تمتلك بدائل أفضل:

السيناريو الخيار الأفضل السبب
واجهة الويب الأمامية JavaScript المتصفحات تدعم JS فقط
تحليل البيانات / تعلّم الآلة Python منظومة غنية، مكتبات واسعة
تطبيقات أندرويد Kotlin التوصية الرسمية من Google
تطبيقات iOS Swift التوصية الرسمية من Apple
النماذج الأولية السريعة Python / Ruby سرعة تطوير عالية
الأنظمة الحرجة للسلامة Rust ضمانات سلامة الذاكرة

اختيار لغة البرمجة كاختيار الأداة — المطرقة ممتازة، لكن لا يجب أن تستخدمها لفك برغي.


7. كيف يبدو برنامج C

قبل الغوص في الصياغة، لنلقِ نظرة سريعة على برنامج C:

C
#include <stdio.h>

int main(void) {
    printf("مرحباً بالعالم!\n");
    return 0;
}

يطبع هذا البرنامج مرحباً بالعالم! على الشاشة. لا تحتاج لفهم كل سطر الآن — الفصول اللاحقة ستشرحها جميعًا. حاليًا، اعرف فقط:

(1) اللغات المترجمة مقابل المفسّرة

C هي لغة مترجمة، ما يختلف جذريًا عن اللغات المفسّرة مثل Python:

الجانب المترجمة (C) المفسّرة (Python)
التنفيذ تُترجم إلى شفرة آلية أولًا، ثم تُشغّل تُفسّر وتُنفّذ سطرًا بسطر
السرعة سريعة (تنفيذ شفرة آلية مباشرة) بطيئة (عبء المفسّر)
كشف الأخطاء تُكتشف أخطاء الصياغة وقت الترجمة تظهر الأخطاء فقط وقت التشغيل
العابر للمنصات ترجمة منفصلة لكل منصة نفس الشفرة تعمل في أي مكان به مفسّر
التوزيع تحتاج فقط توزيع الملف التنفيذي يجب أن يكون المفسّر مثبتًا على الجهاز المستهدف

ميزة اللغات المترجمة أن المترجم يستطيع كشف العديد من الأخطاء أثناء الترجمة بدلًا من تركها تظهر فقط حين يعمل البرنامج. هذا أحد أسباب موثوقية برامج C.


8. كيف تتقن C

إليك بعض النصائح العملية للمبتدئين:

  1. اكتب الشفرة يدويًا: القراءة وحدها ليست تعلّمًا. اطبع كل مفهوم وشغّله بنفسك.
  2. افهم، لا تحفظ: الصياغة يمكن البحث عنها، لكن نموذج الذاكرة ومنطق المؤشرات يجب فهمهما بعمق.
  3. تقبّل الأخطاء: أخطاء الترجمة وأخطاء التشغيل هم أفضل معلميك. تعلّم قراءة رسائل الخطأ هي مهارة أساسية.
  4. ابنِ خطوة بخطوة: تعلّم المشي (الصياغة الأساسية) قبل الركض (المؤشرات، إدارة الذاكرة). لا تتخطّ المراحل.
  5. اقرأ شفرة جيدة: دراسة المشاريع مفتوحة المصدر (مثل شفرة Redis المصدرية) اختصار للتطوير الذاتي.

(1) مسار التعلّم الموصى به

TEXT 📖 للعرض فقط
الصياغة الأساسية → المتغيرات والأنواع → المعاملات → الشروط والحلقات → الدوال
    → المصفوفات → المؤشرات → السلاسل النصية → البُنى → إدخال/إخراج الملفات
    → الذاكرة الديناميكية → القوائم المرتبطة/المكدسات/الطوابير → تطبيق عملي

لا تتخطّ المراحل. كل موضوع قبل المؤشرات يجب أن يكون متقنًا، لأن المؤشرات تتطلب التطبيق المشترك لكل ما سبقها.

(2) مصادر موصى بها

المصدر النوع أبرز المميزات
C Primer Plus كتاب مناسب للمبتدئين، شروحات مفصّلة
The C Programming Language (K&R) كتاب من تأليف مُنشئي C؛ كلاسيكي موجز
C Traps and Pitfalls كتاب أساسي للمتوسطين؛ دليل الفخاخ
CPP Reference (cppreference.com) موقع أكثر مرجع موثوق للمكتبة القياسية لـ C
Learn C (learn-c.org) موقع درس تفاعلي على الإنترنت

▶ مثال

C
#include <stdio.h>

int main(void) {
    printf("مرحبًا يا C!\n");
    printf("C أنشئت عام %d\n", 1972);
    return 0;
}
▶ جرّب الكود
TEXT 📖 للعرض فقط
مرحبًا يا C!
C أنشئت عام 1972


❓ أسئلة شائعة

س هل لغة C عفا عليها الزمن؟ هل ما زلت بحاجة لتعلّمها؟
ج إطلاقًا لا. نواة لينكس وقواعد البيانات والأنظمة المدمجة لا تزال تعتمد اعتمادًا كبيرًا على C. تحتل C باستمرار المراكز الثلاثة الأولى في مؤشر TIOBE وكانت الأولى أو الثانية في 2024. الهدف من تعلّم C هو فهم الحوسبة منخفضة المستوى — وهذه الحاجة لن تزول أبدًا.
س هل أتعلّم C أم C++ أولًا؟
ج ابدأ بـ C. C++ توسّع C، لذا فإن تعلّم C أولًا يجعل انتقالك إلى C++ أسهل بكثير. القفز مباشرة إلى C++ يعني مواجهة البرمجة كائنية التوجه والقوالب و STL دفعة واحدة، ما قد يكون مرهقًا.
س هل أحتاج مهارات رياضية قوية لتعلّم C؟
ج لا. الأساسيات تتطلب فقط رياضيات المرحلة المتوسطة (جمع، طرح، ضرب، قسمة، باقي قسمة). الرياضيات المتقدمة تحتاج فقط في عمل الخوارزميات، وهو موضوع منفصل.
س هل يمكن استخدام C لبناء مواقع ويب أو تطبيقات جوّال؟
ج ليس حقًا. C أساسًا لبرمجة الأنظمة. مواقع الويب تستخدم JavaScript/HTML/CSS، وتطبيقات الجوّال تستخدم Swift/Kotlin/Flutter. لكن الجانب الخادم لمواقع الويب والنواة منخفضة المستوى لأنظمة تشغيل الجوّال تُكتب غالبًا بلغة C.

📖 ملخص

📝 تمارين

  1. اذكر 3 برامج أو أجهزة تستخدمها يوميًا، وفكّر فيما إذا كانت نواتها منخفضة المستوى قد تعمل بلغة C، واشرح أسبابك
  2. قارن بين C و Python من ناحية "إدارة الذاكرة" — صِف إيجابيات وسلبيات كل منهما بكلماتك الخاصة
  3. ابحث عن معيار C23 واعثر على مميزة واحدة جديدة تثير اهتمامك؛ صِف باختصار ما تفعله
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%