Menu
flag Ar iconالعربيةdown icon

ما هي لغة C؟ لغة البرمجة التي تقوم عليها كل اللغات الأخرى

لغة C لغة صغيرة وسريعة ومترجَمة ظهرت عام 1972، وما زالت تشغّل أنظمة التشغيل وقواعد البيانات وكل جهاز مضمَّن تقريبًا. إليك ما هي، وأين تعمل، ولماذا تستحق التعلّم في 2026.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

لغة C لغة برمجة مترجَمة وعامة الأغراض أنشأها دينيس ريتشي في مختبرات بِل عام 1972 لكتابة نظام التشغيل يونكس. لقد عمّرت أطول من كل ما عاصرها تقريبًا، والسبب بسيط: تقع C في طبقة رقيقة واحدة فوق العتاد. تمنحك وصولًا مباشرًا إلى الذاكرة وإلى قدرات المعالج الحقيقية، وتبقى مع ذلك مقروءة كشيء كتبه إنسان.

وبعد نصف قرن، ما زالت هي اللغة التي تُبنى بها اللغات الأخرى.

برنامج C كامل

إليك شكل اللغة بأكمله في ستة أسطر. اضغط تشغيل.

يجلب #include <stdio.h> تصريحات الإدخال والإخراج القياسية لتصبح printf معروفة. وmain هي نقطة بداية كل برنامج C. تكتب printf نصًا، و\n سطر جديد، ويخبر return 0 نظام التشغيل أن البرنامج انتهى بنجاح. هذا برنامج كامل قابل للترجمة - لا صنف يغلّفه ولا إطار عمل تحته.

ما الذي يميّز لغة C

معظم اللغات الحديثة تخفي عنك العتاد. أما C فلا تفعل ذلك عن قصد.

  • تُترجَم إلى شيفرة أصلية. يتحوّل برنامج C إلى تعليمات آلة لمعالج بعينه ويعمل مباشرةً، دون مفسّر ودون آلة افتراضية بينهما.
  • أنت تدير الذاكرة بنفسك. لا يوجد جامع قمامة. تطلب الذاكرة وتعيدها. هذا عمل إضافي، وهو أيضًا سبب استهلاك برامج C لذاكرة قليلة جدًا وامتلاكها توقيتًا يمكن التنبّؤ به.
  • إنها صغيرة. تملك C نحو 32 كلمة مفتاحية. يمكنك استيعاب اللغة كاملة في ذهنك، وهو ما لا يصحّ في C++ أو جافا أو بايثون.
  • تكاد تخلو من بيئة تشغيل. يمكن لبرنامج C أن يعمل على متحكّم دقيق بذاكرة عشوائية من بضعة كيلوبايتات ودون أي نظام تشغيل إطلاقًا.

المقايضة هي الصراحة مقابل الأمان. ستسمح لك C بالقراءة بعد نهاية مصفوفة أو باستخدام ذاكرة حرّرتها سلفًا، ولن توقفك. لتلك الأخطاء أسماء - أخطاء التجزئة، وتسريبات الذاكرة، والسلوك غير المعرَّف - وتعلّم C يعني في معظمه تعلّم تجنّبها.

أين تعمل C فعليًا

ليست C فضولًا تاريخيًا. إنها تعمل الآن على الجهاز الذي تقرأ عليه هذا، عدة مرات في آن.

  • أنظمة التشغيل. نواة لينكس نحو 30 مليون سطر من C. وأجزاء كبيرة من ويندوز ومن نواة آبل مكتوبة بـ C أيضًا.
  • الأنظمة المضمَّنة. المتحكّمات الدقيقة في السيارات ومنظّمات الحرارة والأجهزة الطبية والموجّهات والغسالات تُبرمَج بلغة C في أغلبها الساحق. فحين تكون ذاكرة الرقاقة كلها 32 كيلوبايت، تكون C غالبًا الخيار الواقعي الوحيد.
  • قواعد البيانات. SQLite وPostgreSQL وMySQL وRedis كلها برامج C.
  • بيئات تشغيل اللغات. CPython، المفسّر المرجعي لبايثون، مكتوب بلغة C. وكذلك MRI في روبي، ومحرّك Zend في PHP، ونواة Lua. وحين تكون بايثون "بطيئة جدًا"، يكون الحلّ عادةً امتدادًا مكتوبًا بلغة C.
  • الأدوات والمكتبات. Git وcurl وFFmpeg وOpenSSL وzlib وSQLite مرة أخرى - طبقة البنية التحتية للحوسبة مكتوبة بلغة C.

ولهذا أيضًا تهمّ الواجهة الثنائية للتطبيقات في C: فكل لغة تقريبًا تستطيع استدعاء دالة C. بايثون وRust وGo وجافا وجافاسكربت، لكلٍّ منها طريقة للوصول إلى مكتبات C. فلغة C هي اللغة المشتركة بين اللغات.

لماذا نتعلّم C

هناك إجابتان صريحتان، وكلٌّ منهما تخاطب شخصًا مختلفًا.

إن أردت العمل على الأنظمة - الأنوية، ومشغّلات الأجهزة، والبرمجيات الثابتة المضمَّنة، وقواعد البيانات، ومحرّكات الألعاب - فلغة C هي لغة العمل في ذلك المجال، ومعظم إعلانات الوظائف في تلك المجالات تذكرها صراحةً (وغالبًا إلى جانب C++ أو Rust). ويصعب الإسهام في Linux أو PostgreSQL أو قاعدة شيفرة لمتحكّم دقيق دون قراءة C بيُسر.

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

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

C وC++

بدأت C++ عام 1979 باسم "C مع الأصناف" ونمت لتصبح واحدة من أكبر اللغات الموجودة: أصناف وقوالب واستثناءات وتحميل زائد للعوامل وSTL ومؤشّرات ذكية ومكتبة قياسية تقزّم مواصفة C كاملة.

العلاقة بينهما عمليًا:

  • احتفظت C++ بصياغة C، فـ if وfor وwhile والعوامل والمؤشّرات والمصفوفات تبدو متطابقة في الاثنتين.
  • معظم شيفرة C الجيدة تُترجَم كـ C++، مع استثناءات قليلة (تتطلّب C++ تحويل نتيجة malloc صراحةً، مثلًا).
  • شيفرة C++ لا تكون صالحة كـ C إلا نادرًا جدًا.

إن كنت تنوي تعلّم الاثنتين، فتعلّم C أولًا ميزة حقيقية: تُبنى C++ مباشرةً على نموذج ذاكرة C، وأكثر أجزاء C++ إرباكًا للناس - المؤشّرات والمراجع ودلالات النسخ والهادمات - كلها إجابات عن مشكلات تعرضها C بوضوح.

على أن C ليست مجموعة جزئية من C++ بأي معنى رسمي. فهما معياران منفصلان يتطوّران على حدة، ولدى C الحديثة خصائص لا تملكها C++ (وصلت المُهيّئات المسمّاة في C99، ومؤشّرات restrict، والمصفوفات متغيّرة الطول).

أي C: إصدارات المعيار

لغة C معيارية، والإصدار يهمّ حين تقرأ شيفرة قديمة.

المعيارالسنةيستحق معرفته من أجل
C89 / C901989الأساس القديم. تُعرَّف المتغيّرات في رأس الكتلة فقط.
C991999تعليقات //، وتعريف المتغيّرات في أي مكان، وbool عبر stdbool.h، وlong long
C112011الخيوط، والعمليات الذرّية، ودوال مكتبية أكثر أمانًا
C172018إصدار إصلاحي لـ C11 - وهو الافتراضي الشائع اليوم
C232024true/false/bool ككلمات مفتاحية، وnullptr، والثوابت الثنائية

تستهدف هذه الوثائق C17 وتنبّه إلى خصائص C99 فما فوق حيث تهمّ. تعتمد المترجمات إصدارًا حديثًا افتراضيًا، لكن يمكنك التصريح بذلك:

gcc -std=c17 -Wall -Wextra hello.c -o hello

ما الذي لا تملكه C

جزء من فهم C هو معرفة ما ينقصها، لأن كل سؤال من نوع "كيف أفعل..." له هنا إجابة مختلفة عمّا في لغة حديثة.

  • لا سلاسل نصية. السلسلة في C مصفوفة من char تنتهي ببايت صفري. ودمج اثنتين يعني استدعاء دالة والقلق بشأن ما إذا كانت الوجهة كبيرة بما يكفي.
  • لا مجموعات جاهزة. لا قوائم ولا خرائط ولا مجموعات. تحصل على مصفوفات ثابتة ومؤشّرات؛ وجدول التجزئة شيء تكتبه أو تربط مكتبة من أجله.
  • لا استثناءات. تبلّغ الدوال عن الفشل بإرجاع قيمة خاصة - -1 أو NULL أو رمز حالة - ويُتوقَّع من المستدعي أن يفحصها.
  • لا أنواع معمّمة ولا تحميل زائد. اسم دالة واحد يعني دالة واحدة. ولهذا تملك المكتبة القياسية abs وlabs وfabs لثلاثة أنواع مختلفة.
  • لا فضاءات أسماء ولا وحدات. كل دالة غير static تتشارك فضاء أسماء عامًا واحدًا، ولهذا تسبق مكتبات C كل شيء ببادئة (sqlite3_open، png_read_info).
  • لا جامع قمامة. كل malloc يحتاج free مقابلًا، ونسيان ذلك تسريب للذاكرة.

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

حجم المخزن 32 بايت لأنك أنت قرّرت أن هذا كافٍ. ولن تفحص C ذلك، وهذا القرار هو طابع اللغة كله في سطر واحد.

هل C صعبة؟

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

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

الأسئلة الشائعة

ما هي لغة البرمجة C؟

لغة C لغة برمجة مترجَمة وعامة الأغراض أنشأها دينيس ريتشي في مختبرات بِل عام 1972. تمنحك تحكّمًا مباشرًا في الذاكرة وتقابل عن قرب ما يفعله المعالج فعليًا، ولهذا ما زالت أنظمة التشغيل ومشغّلات الأجهزة وقواعد البيانات تُكتب بها.

فيمَ تُستخدم لغة C اليوم؟

أنوية أنظمة التشغيل (لينكس، وأجزاء من ويندوز وmacOS)، والبرمجيات الثابتة المضمَّنة في السيارات والأجهزة المنزلية والمتحكّمات الدقيقة، وقواعد البيانات مثل SQLite وPostgreSQL، وبيئات تشغيل اللغات مثل CPython وRedis، والمكتبات الحسّاسة للأداء التي تستدعيها اللغات الأخرى.

هل ما زال تعلّم لغة C مجديًا في 2026؟

نعم، لسببين. فهي ما تزال لغة أعمال الأنظمة والأنظمة المضمَّنة، وهو مجال واسع وجيّد الأجر. كما أنها تعلّمك كيف تعمل الذاكرة والمؤشّرات والمكدّس فعليًا - وهي معرفة تجعلك أفضل في كل لغة أخرى، لأن معظمها مبنيّ بلغة C.

ما الفرق بين C وC++؟

بدأت C++ باسم "C مع الأصناف" واحتفظت بمعظم صياغة C مضيفةً البرمجة الكائنية والقوالب والمكتبة القياسية وأكثر بكثير. أما C فأصغر بكثير: بلا أصناف ولا استثناءات ولا أنواع معمّمة. معظم شيفرة C الصحيحة تُترجَم كـ C++، والعكس غير صحيح.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن