الأكواد الأساسية لكتابة برنامج بلغة البرمجة سي
كيفية إنشاء مشروع جديد في بيئة العمل Visual Studio لكتابة برنامج بإستخدام لغة البرمجة C، شرح المكونات الأساسية لكتابة برنامج بلغة البرمجة سي.
لكي تتمكن من كتابة برنامج بلغة البرمجة سي يجب عليك أولا إختيار بيئة العمل المناسبة، خلال هذا المقال سوف نتناول شرح لكيفية كتابة برنامج بإستخدام بيئة العمل Microsoft Visual Studio، وتحديدا النسخة المجانية Visual Studio Community.
الشكل التالي يوضح الخطوات اللازمة لإنشاء مشروع Project جديد
الخطوة الأولى نقوم بفتح القائمة File لإنشاء مشروع جديد، ثم نقوم بإختيار القائمة New ثم Project، وبعد ذلك يتم فتح نافذة جديدة كما هو موضح بالشكل، في الجانب الأيسر من النافذة الجديدة تأكد من إختيار Visual C++، في هذه الخطوة يتم تحديد المترجم Compiler الذي سوف يتم إستخدامة لهذا المشروع، وبعد ذلك تأكد من إختيار Win32 لإنشاء برنامج يعمل على نظام التشغيل Windows، عند إتمام هذه الخطوات سوف تجد نوعين من البرامج المتاحة لنظام التشغيل وهما Win32 Console Application وهذا الإختيار يمكنك من كتابة برامج تعمل من خلال موجه الأوامر CMD، وهو الإختيار الذي يتوجب عليك البدء به لتعلم لغة البرمجة سي، أما بالنسبة للإختيار الثاني Win32 Project، فيستخدم لإنشاء برامج ذات واجهات تفاعلية، بعد إتمام الإختيار الأول يجب تحديد إسم للمشروع الذي سوف تقوم بإنشاؤه، وفي هذا المثال قمنا بإختيار FirstCProgram، وبعد ذلك تأكد من إزالة الإختيارات في الخطوة السابعة، الإختيار Create directory for solution يستخدم لإنشاء مجلد واحد يحتوي على أكثر من مشروع، وهو إختيار لا نحتاج له في الوقت الحالي، والإختيار الثاني Add to Source Control ويتم تحديده إذا كنت تستخدم أي من برامج إدارة الأكواد مثل Git، وهو أيضا إختيار لا نحتاج إليه في الوقت الحالي، بعد ذلك سوف نقوم بالضغط على الزر OK، ليتم فتح نافذه جديده كما بالشكل التالي
في النافذة الأولى تأكد من الضغط على الزر Next، حتى تتمكن من ضبط إعدادات المشروع، ثم في هذه الخطوة تأكد من إختيار Console application، وتأكد أيضا من إختيار Empty project حتى لا يتم إضافة أي ملفات أو أكواد إضافية للمشروع الجديد، ثم الإختيار Security Development Lifecycle (SDL) checks، تأكد من إزالة هذا الإختيار حتى لا تواجه مشاكل أثناء تشغيل الأكواد الخاصة بك، فهذا الخيار يقوم بالتأكد من كتابة الأكواد طبقا لمعايير محددة ويمكنك تعلم المزيد عن هذه المعايير من خلال الرابط التالي https://www.microsoft.com/en-us/securityengineering/sdl، ثم قم بالضغط على الزر Finish.
بعد الإنتهاء من الخطوات السابقة يتبقى خطوة واحدة، وهي إنشاء ملف جديد حتى تتمكن من كتابة أكواد البرنامج بداخله، والشكل التالي يوضح كيفية إتمام هذه الخطوة
أول خطوة في الشكل السابق هي فتح النافذة Solution Explorer، وهي النافذه التي يتم عرض محتويات المشروع من خلالها، ويتم إظهارها عن طريق القائمة View ثم Solution Explorer، قد تظهر النافذه على اليمين أو اليسار، بعد ذلك تقوم بتحديد المجلد Source Files ثم تقوم بالضغط على زر الفأرة الأيمن، لتظهر القائمة المنبثقة المرقمة بـ 5 و 6 في الشكل، عند إختيار New Item يتم فتح نافذة جديدة، في هذه النافذة تأكد من إختيار Visual C++، ثم في الحقل Name قم بكتابة إسم الملف ولكن تأكد من كتابة اللاحقة Extension أو الإمتداد بـ .c
، حتى يتم ترجمة الأوامر بالمترجم الخاص بلغة السي، في هذه الخطوة قمنا بإنشاء الملف main.c
ثم نضغط على الزر Add، لتكون بذلك جاهز لكتابة أول برنامج بلغة البرمجة سي من خلال بيئة العمل فيجوال ستوديو.
للتأكد من أن كل شيء يعمل بشكل جيد قم بنسخ الكود التالي في الملف الذي قمت بإنشاؤه ثم قم بالضغط على الزر F5 حتى يتم ترجمة وتشغيل الكود، ثم سوف نقوم بشرح الكود بالتفصيل
#include <stdio.h>#include <stdlib.h>int main() {printf("Learning C by Abuelfateh.\n");system("pause");return 0;}
عند تشغيل الكود السابق يجب أن تظهر شاشة موجه الأوامر (سطر الأوامر)، كما بالشكل التالي
إذا واجهت أي مشكلة خلال تشغيل البرنامج، فعليك أولا بإعادة الخطوات السابقة كما تم شرحها، وإذا ظلت المشكلة موجودة فيمكنك مشاركتنا برسالة الخطأ من خلال التعليقات لكي نحاول حلها سويا، وإذا تمكنت من تشغيل البرنامج بنجاح، فيمكنك متابعة قراءة المقال لشرح كود البرنامج بالتفصيل.
محتويات أي برنامج مكتوب بـ لغة البرمجة سي
يتكون أي برنامج مكتوب بلغة البرمجة سي من قسمين أساسيين، وهما قسم يتم معالجته من قبل الـ PreProcessor المدمج في بيئة العمل، والقسم الآخر يحتوي على الأكواد البرمجية الخاصة بلغة البرمجة سي.
كل برنامج مكتوب بلغة البرمجة سي يجب أن يحتوي على دالة إسمها main
، وتعتبر هذه الدالة هي نقطة البداية لتشغيل أي برنامج، في المثال السابق تم كتابة الدالة int main()
، متبوعة بالأقواس المعقوفة Curly Braces وبداخل هذه الأقواس يتم كتابة محتويات البرنامج.
أوامر المعالجة المسبقة - Preprocess
وهذا الجزء من الكود يتم معالجته قبل البدء في ترجمة (Compile) أكواد البرنامج، وعادة ما يحتوي هذا القسم على أوامر تبدأ بعلامة الهاش #
، في البرنامج السابق قمنا بكتابة الأمر #include
وهو أمر يقوم بتحميل مكتبات خارجية لدمجها في البرنامج.
هذه الأوامر يجب أن تكتب في سطر واحد، حيث لا يمكن كتابة الأمر الواحد على أكثر من سطر، إلا إذا إستخدمنا علامة الشرطة المائلة الخلفية \
في نهاية السطر، ولكن يفضل دائما كتابة كل أمر في سطر مستقل، والكود التالي يوضح ذلك
#include <stdio.h>#include \<stdlib.h>
لتوضيح ذلك فإن علامة الـ Backslash تقوم بتخطي الحرف المسئول عن كتابة سطر جديد، وبالتالي عند قراءة الملف لا يتم ترجمة هذا الحرف على أنه سطر جديد، ولذلك يجب التأكد من أن العلامة مكتوبة في نهاية السطر ولا يتبعها أي مسافات أو أي حرف آخر، وتذكر دائما أنه لا يفضل إستخدامها.
عند ترجمة الكود يتم إستبدال هذا الأمر بمحتويات الملف (المكتبة) التي تم تحديدها بعد الأمر مباشرة، فمن الكود السابق سوف تلاحظ أننا إستدعينا المكتبة stdio.h
وذلك حتى نتمكن من إستخدام دالة الطباعة printf
والتي تمكننا من طباعة أي نص من خلال سطر الأوامر، وقمنا أيضا بإستخدام المكتبة stdlib.h
حتى نتمكن من إستخدام الدالة system
وهي الدالة التي نتمكن من خلالها تشغيل أوامر خاصة بنظام التشغيل، وفي هذا المثال الأمر هو pause
.
الأمر #include
يكتب بعده مسافة واحدة أو أكثر يليها إسم المكتبة التي نريد إستخدامها ويكون الإسم مكتوب بين علامتين أصغر من وأكبر من، أو يمكن أن يكتب بين علامة التنصيص double quote، والفرق بينهم أن علامة التنصيص تستخدم مع المكتبات التي يتم كتابتها أو إدراجها مع ملفات المشروع (وسوف نتناول ذلك لاحقا بالتفصيل)، أما المكتبات المدمجة مع بيئة العمل تكتب بين علامة أصغر وأكبر كما إستخدمناهم في المثال السابق.
الدالة main
كما تعرفنا، فإن أي برنامج مكتوب بلغة البرمجة C، يجب أن يحتوي على دالة إسمها main، فعند ترجمة الكود يتم البحث عن هذه الدالة في الكود لتحديدها على أنها نقطة بداية التشغيل للبرنامج، لذلك يجب أن يتم كتابة محتويات البرنامج بداخل الأقواس المعقوفة الخاصة بهذه الدالة، قد تجد بعض البرامج يتم فيها كتابة الدالة بالشكل التالي
int main(int argc, char *argv[])
في الوقت الحالي يمكنك إعتبار الدالتين متطابقتين، حيث سوف نتناول هذا الشكل في مقالات لاحقة، ولكن كبداية يمكنك إستخدام الدالة بشكلها المبسط الذي تم كتابته في المثال.
الدالة printf
وهي الدالة التي تستخدم لطباعة أي نص من خلال سطر الأوامر، في هذا المثال تم إستخدامها لطباعة الجملة Learning C by Abuelfateh. وسوف تلاحظ كتابة الجملة بين علامات التنصيص المزدوجة، وفي نهاية الجملة تمت كتابة \n
وهو حرف خاص يستخدم لطباعة سطر جديد.
التعريف أو الـ Definition الخاص بهذه الدالة موجود في المكتبة أو الملف stdio.h
، وهو عبارة عن ملف تمت كتابته مسبقا من قبل مصممي الـ Compiler، وهنا قمنا بإستدعاء هذه المكتبة من خلال الأمر #include
في بداية البرنامج، حتى نتمكن من إستخدام الدالة printf()
.
إسم هذه الدالة هو إختصار لـ print formatted، ما يعني أنها تمكنك من تنسيق الطباعة (في برنامج سطر الأوامر)، وتعتبر هذه الدالة من أهم وأكثر الدوال إستخداما في لغة البرمجة سي، لذلك قمنا بتخصيص مقال منفصل لـ شرح إستخدامات الدالة printf() في لغة البرمجة C.
الدالة system
هذه الدالة تستخدم لتشغيل الأوامر الخاصة بنظام التشغيل (في هذه الحالة هو ويندوز)، قمنا بإستخدامها لتشغيل الأمر pause، وهو الأمر الذي يقوم بإيقاف تشغيل البرنامج بشكل مؤقت حيث يقوم بطباعة الجملة press any key to continue... وعند الضغط على أي زر في لوحة المفاتيح يتم إغلاق البرنامج.
بطبيعة الحال فإن برامج سطر الأوامر يتم تشغيلها عن طريق تشغيل برنامج سطر الأوامر CMD ثم كتابة إسم البرنامج، حيث يتم تشغيل البرنامج وعند إنتهاء تنفيذ البرنامج يتم إغلاقه مباشرة، ولكن عند إستخدام هذه الطريقة سوف تتمكن من رؤية نتيجة التشغيل وذلك لأنك لم تقم بإغلاق برنامج سطر الأوامر، ولكن أثناء كتابة البرنامج وتشغيله من خلال بيئة العمل فيجوال ستوديو فإن بيئة العمل تقوم بتشغيل برنامج سطر الأوامر وتقوم بإغلاقة مباشرة بعد إنتهاء تنفيذ كود البرنامج مما يترتب عليه عدم رؤيتك لنتيجة تشغيل البرنامج.
وبالتالي نقوم بإستخدام هذا الأمر مباشرة قبل الأمر return
حتى يتم عمل إيقاف مؤقت للبرنامج لتتاح لك الفرصة لرؤية نتيجة التشغيل ثم الإغلاق بشكل يدوي عن طريق الضغط على أي زر في لوحة المفاتيح.
الأمر return
هذا الأمر يستخدم لإرجاع قيمة إلى مشغل البرنامج في هذه الحالة مستخدم البرنامج هو برنامج سطر الأوامر، وبرنامج سطر الأوامر ينتظر عودة القيمة صفر في حالة التشغيل بشكل سليم (بدون أخطاء)، ولذلك يتم كتابة الأمر return 0;
، حتى يتم إرجاع القيمة صفر إلى سطر الأوامر، ويجب أن يكون هذا الأمر هو آخر أمر مكتوب بداخل الأقواس المعقوفة الخاصة بالدالة main
.
بالطبع هذا الأمر يستخدم في أي دالة، ويمكن أن يقوم بإرجاع أي قيمة سواء كانت عددية أو نصية، ولكن في هذا المثال أو في الدالة main
بشكل عام يجب أن يستخدم لإرجاع القيمة صفر في نهاية الدالة.