ماهي لغة سي C
تعتبر لغة السي من أقوى اللغات على الإطلاق و طورت عنها العديد من اللغات الحديثة نسبياً مثل #C و جافا و و ++C. و هي لغة high-level ولكنها تحتوى على بعض خصائص الـ low-level لذا يطلق عليها في الغالب middle-level language و سنستعرض. معاً بعض مميزات اللغة التي جعلتها تحظى بذلك الرواج و بتلك القوة الكفاءة. و هذا يرجع إلى أن اللغة low-level مقارنة باللغات الأخرى لما تحتويه من بعض الخصائص التي تتعامل مباشرة مع الهاردوير مثل المؤشرات pointers مما يعني أنها قريبة جداً من لغة الآلة و هذا بدوره. يعني أنها تقوم بتنفيذ البرامج بشكل أسرع وسرعة تنفيذ البرامج تعد عاملاً مهماً في تحديد قوة اللغة.
القوة و على الرغم من صغر لغة السي إلا أنها تستمد قوتها من الـ standard library الخاصة بها و التي تحوى مئات الدوال التي تقوم بعمليات كثيرة. فتغنيك عن كتابة المئات من الأسطر للقيام بعملية معينة فهي تمدك بدالة تقوم بتلك العملية في سطر واحد.
Portability و تعنى أن البرنامج الذي تمت كتابته باللغة يعمل على مختلف أجهزة الحاسب الآلى بداية من الحاسب الشخصى و إنتهاءاً بالحاسبات العملاقة.
المرونة تتميز اللغة بأنها لا تحد المبرمج بحدود صارمة عندما يتعلق الأمر بإستخدام خواص اللغة و هذا يميزها عن العديد من اللغات. فلغة السي بنيت على قاعدة مشهورة تقول بأن (( المبرمج يعلم ما يفعل )) فهناك بعض العمليات تسمح بها اللغة و لا تعتبرها كخطأ و لكن في لغات برمجية أخرى لا يتم السماح بها. فمثلاً يمكنك جمع متغير من النوع char على آخر من النوع int أو float دون أي مشكلة هناك لغات أخرى لا تسمح بذلك و الأمثلة على تلك العمليات. كثيرة و سيتضح لك الكثير منها خلال تعاملك مع اللغة و لكن هذه المرونة قد تتسبب لك في بعض المشاكل. في برامجك - bugs التكامل مع نظام التشغيل Linux و هذا التكامل أضاف إلى اللغة الكثير و خاصة فيما يتعلق بالـ Portability.
عيوب لغة سي
كأي لغة برمجة لا تخلو لغة السي كذلك من العيوب نستعرض بعضها معاً:
عرضة اكثر للأخطاء البرمجية و هذا يرجع إلى أن المترجم الخاص باللغة لا يكتشف بعض الأخطاء. أثناء عملية الترجمة و التي قد يتم إكتشف مثلها في لغات أخرى فمعظم الأخطاء تظهر في وقت تنفيذ البرنامج و ليس ترجمته. و هذا هو الأثر السلبي للمرونة التي تتميز بها اللغة.
صعوبة فهم الكود فعلى الرغم من صغر لغة السي إلا أنها تحتوى على خصائص عديدة تكتسبها من الـ standard library الخاصة. بها كما ذكرنا من قبل و عند مزج هذه الخصائص معاً في المراحل المتقدمة من إحتراف اللغة تصبح الامور أكثر صعوبة.
صعوبة تعديل الكود في المشاريع الضخمة المطورة بلغة السي يصعب عليك تعديلها مرة أخرى لأن السى لا تدعم بعض الخصائص التي تساعد على تجزئة البرنامج و تنظيمه مثل الـ classes و الـ packages.
أهم المجالات التطبيقية للغة سي
تطوير نظم التشغيل operating systems و تعد أهم المجالات التطبيقية للغة سي فمعظم نظم التشغيل التي نستخدمها يومياً حتى على هواتفنا المحمولة مطور جزء كبير منها بلغة السي.
الأنظمة المدمجة embedded systems يتم برمجة الأنظمة المدمجة بلغة السي في أغلب الأحيان و هي اللغة الأشهر في هذا المجال.
فبرمجة المتحكمات الدقيقية microcontrollers تتم بلغة السي أو بلغة مكون معظمها من لغة السي فمثلا الأردوينو يستخدم لغة خاصة. به تسمى Arduino C و هي لغة مطورة من السي بشكل أساسي مع لغة أخرى تسمى الـ Processing.
تطوير compilers للغات أخرى و المترجم compiler هو برنامج يترجم الكود إلى لغة الآلة .
تستخدم في قواعد البيانات databases و كذلك تستخدم في تطوير الـ text editors مثل الـ word.
و هنا نكتفي بهذا القدر من التحدث عن مميزات اللغة و تطبيقاتها و أعتقد بأنك تستطيع الآن أن تحدد حاجتك إلى تعلم اللغة من عدمها.
دوال الإدخال و الإخراج
يمكن حفظ بيانات في متغير معين في الذاكرة بطريقتين الأولى أن يتم إعطاء هذا المتغير قيمة مباشرة عن طريق الـ assignment أو عن طريق إستقبال بيانات من المستخدم و حفظها في هذا المتغير.
و نقوم بهذا عن طريق إستخدام دوال الإدخال و الإخراج و قد تعرضنا لواحدة منها سلفاً و هي دالة printf و قلنا أنها تستخدم لطباعة بيانات معينة للمستخدم. و يوجد الكثير من دوال الإخراج على غرار دالة printf و كل هذه الدوال موجودة في ملف (stdio.h) الذي تعرضنا له سابقاً، و سنستعرض الآن دالة printf و دالة scanf و تستخدم لعملية إدخال بيانات من المستخدم.
نبذة عن كتاب تعلم لغة C
الكتاب يحتوى على أساسيات لغة السي و يتطرق إلى بعض المواضيع المتقدمة المنتقاة ولا يتطرق إلى كل المواضيع. لأنه تم عمل الكتاب ليشكل مصدراً لتعلم لغة السي بكل بساطة و وضوح في الشرح لكل الأساسيات وليضعك على بداية طريق الإحتراف. من خلال التطرق للموضوعات المتقدمة التي أدرجت فيه و لم يتم عمله ليصبح مرجعاً يحتوى على كل المواضيع.
الكتاب يركّز بشكل ملحوظ على المواضيع التي تختلف فيها لغة السي عن أغلب اللغات فستجد أن الفصول الأربعة الأخيرة ( المؤشرات و حجز الذاكرة ديناميكياً، الدوال، المتغيرات النصية و التعامل مع الملفات ). تم تركيز الشرح عليهم بشكل ملحوظ.
و الفصول الأولى تم تناولها بأبسط شكل ممكن لسببين:
- الأغلبية عندهم علم مسبق بتلك المواضيع فهي مشابهة كثيراً لإستخدامها في اللغات الأخرى.
- سيتم توظيف هذه المواضيع في برامجنا في المواضيع المتقدمة.
لذلك لم أجد فائدة كبيرة في إدراج أمثلة كثيرة في المواضيع الأولى. لتحقق الإستفادة القصوى من الكتاب يجب أن تكون قد تعاملت مع لغة برمجة واحدة على الأقل من قبل و لا يستلزم أي معرفة مسبقة بلغة السي.
كيفية عرض فصول كتاب لغة C
- يبدأ كل فصل بعرض "ما يجب أن تكون قد تعلمته في نهاية هذا الفصل".
- ثم يتم تناول نظرة عامة عن الخاصية التي سيتم دراستها في هذا الفصل و إيضاح مجموعة من المفاهيم التي تساعدك في فهم هذه الخاصية و الهدف من وراء دراستها ... إلخ.
- ثم يتم شرح هذه الخاصية و التوضيح بمجموعة من الأمثلة المتنوعة.
- ثم يتم تناول شرح برنامج تطبيقي في أغلب المواضيع, نقوم فيه بتعلم كيفية توظيف الخاصية التي تم دراستها في هذا الفصل في برامجنا الخاصة.
تمارين وتحديات في لغة سي
من أهم عوامل النجاح في إتقان أي لغة برمجة هو التدريب العملي المستمر على كتابة البرامج المختلفة لذا سيكون كل موضوع في هذا الكتاب. مصحوباً في نهايته بمجموعة جيدة من التمارين متدرجة الصعوبة التي يجب أن تقوم بتنفيذها بنفسك.
1 ) اكتب برنامجاً يستقبل من المستخدم راتبه الإسبوعي بالجنيه السوداني وكذلك عدد ساعات عمله اليومية كقيم من النوع float ثم يقوم البرنامج بطباعة متوسط الأجر الذي يتقاضاه للساعة الواحدة على هيئة جنيهات و قروش.
2 ) إذا كان لديك نوعين من المنتجات الأول من فئة 3 جنيهات ، والثاني من فئة 5 جنيهات, اكتب برنامجاً . يستقبل من المستخدم عدد القطع المراد شرائها من كل نوع ثم يقوم البرنامج بطباعة الحساب الإجمالي.
3 ) اكتب برنامجاً لحساب الوقت المستغرق في تهذيب النبات بحديقة المنزل, اطلب من المستخدم أبعاد المنزل علماً بأن المنزل على شكل مستطيل. و كذلك نصف قطر الحديقة التي تحوى المنزل علماً بأنها على شكل دائرة علماً بأن المتر المربع الواحد يستغرق دقيقتان, كم دقيقة تلزم لتهذيب حديقة المنزل؟.