مقدمة في لغة البرمجة C
Ahmed AbuelfatehAhmed Abuelfateh

مقدمة في لغة البرمجة C

تعريف لغة البرمجة C، مخترع لغة البرمجة سي،تاريخ لغة البرمجة C و بداياتها، مميزات لغة البرمجة سي و إستخداماتها، مراحل تطوير برنامج بلغة سي، إصدارات لغة البرمجة K&R C, C89, ANSI C, ISO C, C99, C11, C18

لغة البرمجة C

تنطق سي، وهي لغة تستخدم في برمجة الكمبيوتر أو أي آلة تحتوي على معالج أو متحكم (Microcontroller)، فهي لغة برمجة متعددة الأغراض، صممت في الأساس لبرمجة نظام التشغيل UNIX، وتعد من لغات البرمجة الإجرائية (Procedural Language)، أي أن البرنامج المكتوب بلغة السي هو عبارة عن سلسلة من الأوامر، يتم تنفيذها أمر تلو الآخر، وأيضا تعتبر لغة البرمجة C من اللغات المترجمة (Compiled Language)، ما يعني أنها تحتاج إلى مترجم (Compiler) لكي يقوم بتحويل الكود من لغة سي إلى لغة الآلة.

إستخدام المترجم Compiler في لغة البرمجة C، يتيح إنتاج أكواد أو تعليمات برمجية تستخدم كل إمكانيات العتاد Hardware المتاحة في الجهاز، مما يجعل البرامج سريعة في التشغيل، وكذلك يجعل لغة البرمجة مستقلة عن الآلة Machine-Independent أي أن الأوامر البرمجية المكتوبة بلغة الـ C يمكن أن تعمل على أي آلة، بشرط إستخدام المترجم الخاص بهذه الآلة.

تحتوي لغة البرمجة C على عدد بسيط جدا من الكلمات المحجوزة (الأوامر)، مما يجعلها لغة برمجة سهلة التعلم، ويجعلها أيضا أكثر مرونة في الإستخدام، حيث يتم إستخدام المكتبات الخارجية (Code Libraries) لأداء العديد من المهام.

تتميز لغة البرمجة C بأنها ليست لغة عالية المستوى بالمعنى المتعارف عليه للغات البرمجة عالية المستوى، حيث يتم كتابة الكود بطريقة بسيطه وسهلة الفهم بالنسبة للمبرمجين كما هو الحال في لغات البرمجة عالية المستوى، مع الإحتفاظ بالتحكم الكامل في موارد الجهاز كما هو الحال في لغة التجميع Assembly، مما يتيح سهولة التحكم في هيكلة البيانات والتي تعرف بـ Data Structure.

من هو مخترع / مبتكر لغة البرمجة C؟

مبتكر لغة البرمجة سي C، هو دينيس ريتشي - Dennis Ritchie، وهو عالم أمريكي متخصص في علوم الحاسب، ولد في 9 سبتمير 1941، وتوفي في 12 أكتوبر 2011، وقد إبتكر أيضا نظام التشغيل UNIX، بمساعدة صديقه كين ثومبسون - Ken Thompson.

دينيس ريتشي - Dennis Ritchie - مخترع لغة البرمجة C

مصدر الصورة https://en.wikipedia.org/wiki/File:Dennis_Ritchie_2011.jpg.

حاصل على درجة الدكتوراة في مجال علوم الحاسب من جامعة هارفارد في العام 1968، وفي العام 1983 حصل على جائزة آلان تورينج لعلوم الحاسب Turing Award، وتعد هذه الجائزة أعلى جائزة أو وسام قد يحصل عليه أي من علماء الحاسب، حيث تعد بمثابة جائزة نوبل في علوم الحاسب.

تاريخ لغة البرمجة C

تم إنشاؤها في الأساس لكتابة نواة نظام التشغيل يونيكس UNIX، حيث تم بالفعل كتابة أول نواة لنظام التشغيل بلغة التجميع Assembly، وهو ما أكد أنها لغة غير ملائمة لتلك المهمة حيث يستهلك كتابة الكود الخاص بهيكلة البيانات الكثير من الوقت، مع وجود صعوبة في إكتشاف الأخطاء البرمجية أو ما يعرف بـ Debugging.

في تلك الفترة كانت لغات البرمجة الموجودة بالفعل هي لغة البرمجة B ولغة البرمجة BCPL، ولغة البرمجة Fortran، ولغة البرمجة PL/I، وتم بالفعل محاولة إستخدام هذه اللغات لكتابة نواة نظام التشغيل UNIX، ولكن أداء نظام التشغيل أو ما يعرف بـ Performance كان ضعيف جدا، ولذلك تم إستخدام لغة التجميع في الإصدارات الأولى من نواة نظام التشغيل.

في تلك الفترة وتحديدا في العام 1972 إبتكر دينيس ريتشي Dennis Ritchie لغة البرمجة C، حيث قام بمعالجة كل المشاكل التي واجهته هو و كين ثومبسون Ken Thompson أثناء كتابة نواة نظام التشغيل UNIX، وكان يطلق عليها في ذلك الوقت New B لأنها تعتبر تعديل على لغة البرمجة B.

تم إعادة كتابة أو برمجة نواة نظام التشغيل UNIX، بإستخدام لغة البرمجة C، وكان ذلك في العام 1973 حيث كان الإصدار الرابع من نظام التشغيل UNIX.

مميزات لغة البرمجة C

إستخدام عدد قليل جدا من الكلمات المحجوزة (الأوامر البرمجية)، بما في ذلك الكلمات الخاصة بالجمل الشرطية والحلقات مثل if و else و switch و while و for...

إستخدام أنواع محددة وثابتة للبيانات، مع إمكانية تحويل نوع البيانات ضمنيا فيما يعرف بـ Type Casting.

تدعم تنفيذ العديد من العمليات الحسابية والمنطقية، بما في ذلك العمليات الخاصة بالتحكم في البيانات على مستوى البت Bit، وتعرف هذه العمليات بـ bitwise Operations.

إمكانية كتابة الأكواد البرمجية في أكثر من ملف، وإمكانية ترجمة كل ملف بشكل منفصل، ثم إتاحة دمج الملفات المترجمة مسبقا في ما يعرف بـ Linking.

إستخدامات لغة البرمجة C

تعد برمجة أنظمة التشغيل، هو الإستخدام الأساسي لـ اللغة، حيث تم إستخدام لغة البرمجة C في برمجة نظام التشغيل ويندوز Windows، ونظام التشغيل ماكينتوش Mac وحتى نظام التشغيل iOS، ويتم إستخدامها أيضا في برمجة نظام التشغيل لينكس Linux، وحتى نظام التشغيل أندرويد Android، ويمكنك إعتبار أن لغة البرمجة C، تستخدم في إنشاء جميع أنظمة التشغيل المتاحة حتى يومنا هذا.

وتستخدم أيضا في إنشاء المترجمات Compilers، والمفسرات Interpreters الخاصة بلغات البرمجة المختلفة، حيث تم إنشاء مفسر لغة البرمجة بايثون Python بإستخدام لغة سي، والمفسر الخاص بلغة PHP و لغة Perl أيضا تم إنشاؤهم بإستخدام لغة البرمجة C، ويوجد العديد من المكتبات البرمجية المستخدمة في العديد من لغات البرمجة المختلفة تم إنشاؤها في الأساس بإستخدام لغة البرمجة C.

تستخدم في إنشاء العديد من البرامج التي تستخدمها بشكل يومي، حيث تم إستخدام لغة البرمجة C في كتابة العديد من المتصفحات ولو بشكل جزئي، بما فيهم المتصفح Chrome و Firefox وغيرها من متصفحات الإنترنت.

بالطبع تستخدم لغة البرمجة C بشكل أساسي في برمجة المتحكمات Microcontrollers، حيث يتم إستخدامها في برمجة العديد من الآلات بما يشمل أجهزة التحكم الخاصة ببرامج الفضاء في وكالة ناسا.

نظرا لسرعة أداء الأكواد المكتوبة بلغة البرمجة C، ولقربها من التحكم في العتاد من ذاكرة أو معالج، يتم إستخدامها في كتابة الخوارزميات كثيفة العمليات الحسابية، حيث تم إستخدام لغة البرمجة C ولو بشكل جزئي في كتابة الخوارزميات المستخدمة في الـ Matlab، والعديد من المكتبات البرمجية الأخرى.

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

إصدارات لغة البرمجة C

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

K&R

في العام 1978 تم إصدار الكتاب الشهير The C Programming Language، بواسطة دينيس ريتشي و برايان كيرنيغ، وكان هذا الكتاب يعتبر المرجع الأساسي للمواصفات (Specification) الخاصة بلغة البرمجة C وأحيانا تسمى بـ خصائص اللغة، وسمي هذا الإصدار من اللغة نسبة إلى المؤلفين.

الإصدار K&R كان يحتوي على قرابة الـ 27 كلمة محجوزة أو أمر برمجي، حيث قام بعض مطوري المترجمات بإضافة بعض الكلمات بخلاف ما نشر في الكتاب، ومع إنتشار لغة البرمجة C كان لابد من إعداد معيار للغة من إجل ضمان إلتزام جميع مطوري المترجمات بهذا المعيار.

ANCI C / ISO C / C89 / C90

مع بداية عقد الثمانينيات كانت لغة البرمجة C قد إنتشرت بشكل كبير، وكان قد تم دعمها على العديد من الأجهزة المستخدمة في ذلك الوقت، مما دعى المعهد القومي الأمريكي للقياس (ANCI) إلى البدء في إعداد معيار لهذه اللغة، وبالفعل مع بداية العام 1983 قام المعهد بتشكيل لجنة سميت بـ X3J11 من أجل إعداد المواصفات القياسية لتحديد خصائص لغة البرمجة C، وبالفعل في العام 1989 قامت هذه اللجنة بإصدار معيار خاص بـ لغة البرمجة C، وتم تسمية هذا الإصدار بـ ANCI C ويعرف أيضا بـ C89.

في العام 1990 قامت المنظمة الدولية للمعايير ISO بإعادة تنسيق معيار لغة البرمجة C، وعند طرحه تم تسميته بـ C90 أو ISO C، وفي حال ما كنت تتسائل عن الإختلاف بين الإصدارين C89 و C90 فهما يعدان نفس الإصدار عمليا، ولكن مع إختلاف في طريقة كتابة محتوى المعيار، ولكن اللغة نفسها واحدة، ولذلك المسميات الأربعة تشير إلى نفس الإصدار.

الإصدار C89 كان يحتوي على 32 أمر برمجي، أو كلمة محجوزة للتعبير عن لغة البرمجة C.

C99

في نهاية عقد التسعينيات قامت المنظمة الدولية للمعايير بإجراء بعض التعديلات على لغة البرمجة C، وقامت أيضا بإضافة بعض التحسينات والأوامر الجديدة، وبعض أنواع البيانات.

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

هذا الإصدار كان يحتوي على 37 كلمة محجوزة.

C11

في العام 2007 بدأ العمل على إنشاء إصدار جديد من لغة البرمجة C، وتم الإنتهاء من إعداد هذا الإصدار في العام 2011.

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

هذا الإصدار من اللغة يحتوي على 44 كلمة محجوزة.

C18

في العام 2018 تم إجراء بعض التعديلات الطفيفة على اللغة لمعالجة بعض المشكلات والعيوب التي ظهرت في الإصدار C11، ولم يتم إضافة أي مميزات جديدة للغة البرمجة C.

Embedded C

مع إنتشار لغة البرمجة C في برمجة المتحكمات Microcontrollers، ونظرا لوجود بعض الإختلافات في طبيعة المتحكمات عن المعالجات الخاصة بأجهزة الحاسوب، أدى ذلك إلى وجود العديد من المعايير الغير معتمدة أو الغير أساسية في إنشاء المترجمات الخاصة بهذه المتحكمات.

مما دعى لجنة إعتماد المعايير الخاصة بلغة البرمجة C، إلى نشر بعض التقارير التقنية وتم إضافة هذه التقارير إلى المعيار الأساسي لـ لغة البرمجة C، في العام 2008، ليتم معالجة المشكلات الخاصة بإستخدام لغة البرمجة C في وحدات التحكم، وبالطبع هذه الإضافات غير مدعومة من المترجمات الخاصة بأجهزة الحاسوب العادية.

مراحل تطوير برنامج بإستخدام لغة البرمجة C

لكي تقوم بإنشاء أو تطوير أي برنامج بإستخدام لغة البرمجة C، فإن البرنامج يمر بعدة مراحل أو خطوات، وتحديدا أربع خطوات لإنشاء أو تطوير البرنامج، وخطوتين لتشغيله، وخطوات تطوير البرنامج كالتالي:

كتابة الكود

وفي هذه المرحلة يتم كتابة أكواد البرنامج بلغة البرمجة سي، ويتم ذلك بإستخدام أي برنامج لتحرير الأكواد البرمجية، وتسمى هذه المرحلة بمرحلة الكتابة أو Editor، حيث يتم كتابة الأكواد في ملفات بإمتداد .c و .h.

معالجة النصوص قبل الترجمة

في هذه المرحلة يتم معالجة بعض الأكواد البرمجية والتي تستخدم أوامر محددة تعرف بـ Macro، ليتم تنفيذها قبل ترجمة أكواد البرنامج، وتتم هذه الخطوة عن طريق المترجم، فعادة ما يحتوي المترجم على برنامج خاص للقيام بهذه المهمة يسمى بـ C Preprocessor، وسوف نتناول هذه الخطوة تفصيلا في مقالات لاحقة.

الترجمة

وفي هذه الخطوة يتم قراءة وترجمة الأكواد المكتوبة بلغة البرمجة C عن طريق المترجم أو الـ Compiler، ليتم تحويلها إلى لغة الآلة وعادة ما يتم ترجمة كل ملف على حده، و نتيجة هذه الترجمة تعرف بـ Object Code، وعادة ما تكون ملفات بإمتداد .o أو .obj.

الربط / التجميع

في هذه المرحلة يتم إستخدام برنامج خاص يسمى بـ Linker، وفي أغلب الأحيان يكون مدمج مع المترجم، حيث يقوم هذا البرنامج بربط أو تجميع الملفات التي تم ترجمتها مع الملفات الخاصة بالمكتبات التي تم إستخدامها في البرنامج، ليتم دمجهم معا في ملف قابل للتشغيل، بحيث يكون إمتداده .exe في أنظمة التشغيل ويندوز أو .osx في أنظمة التشغيل ماكينتوش أو .out أو .run في أنظمة التشغيل لينكس.

8406

Discussion

    • Add new Comment
    • Captcha
      Captcha
    • Notify me of follow up comments via email.