كل ما تحتاج لمعرفته حول الوظائف في لغة سي؟



ستقدم لك هذه المقالة مفهومًا بسيطًا ولكنه أساسي ومهم للغاية وهو الدوال في لغة C ومتابعتها بعرض توضيحي.

ستقدم لك هذه المقالة بسيطة ولكنها أساسية ومهمة للغاية مفهوم الوظائف في لغة C ومتابعته بمظاهرة. سيتم تغطية المؤشرات التالية في هذه المقالة ،

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





لنبدأ بالسؤال الأساسي.

ما هي وظائف في سي؟

الوظائف في لغة C هي نفسها في أي لغة برمجة أخرى. إنها مجموعة من الرموز التي ترتبط ببعضها البعض لأداء مهمة محددة. يتم تحديد مجموعة التعليمات البرمجية المراد تنفيذها بأقواس معقوفة ، أي '{}'.



قبل تعلم كيفية كتابة دالة بلغة C ، دعنا نفهم أولاً ما هي المزايا.

مزايا الوظائف في ج

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

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



توفر الوظيفة أيضًا التجريد ، حيث يمكننا استدعاء دالة والحصول على المخرجات دون معرفة التنفيذ الداخلي.

المضي قدما مع أنواع الوظيفة ج

كيفية رفع رقم إلى قوة في جافا

أنواع الوظيفة في ج

هناك نوعان من الوظائف:
وظائف المكتبة
وظائف محددة من قبل المستخدم

وظائف المكتبة هي تلك الوظائف التي تم تحديدها بالفعل في مكتبة C مثل strcat () ، printf () ، scanf () إلخ. تحتاج فقط إلى تضمين ملفات رأس مناسبة لاستخدام هذه الوظائف.
الوظائف المعرفة من قبل المستخدم هي تلك الوظائف التي يحددها المستخدم. هذه الوظائف مصممة لإعادة استخدام الكود ولتوفير الوقت والمساحة.

الآن بعد أن عرفنا فوائد إنشاء دالة ، دعنا نفهم كيفية إعلان وظيفة في C.

إعلان وتعريف الوظيفة

إعلان الوظيفة:

بناء جملة إعلان الوظيفة:

return_type function_name (data_type arg1، data_type arg2) int add (int x، int y) // إعلان الوظيفة

في إعلان الوظيفة ، نحدد اسم الوظيفة ، وعدد معلمة الإدخال ، وأنواع بياناتها ونوع إرجاع الوظيفة. يخبر إعلان الوظيفة المترجم عن قائمة الوسائط التي تتوقعها الوظيفة مع أنواع بياناتها ونوع إرجاع الوظيفة.

في إعلان الوظيفة ، يكون تحديد أسماء المعلمة اختياريًا ، لكن تحديد أنواع البيانات الخاصة بها أمر إلزامي.

int add (int، int) // إعلان الوظيفة

سوف تأخذ الوظيفة المحددة أعلاه معلمتين صحيحين.

تعريف الوظيفة

 وظائف الصورة في C- Edureka
int add (int، int) // إعلان الوظيفة return_type function_name (parameters) {Function body}

كما هو موضح في الصورة أعلاه ، يتكون تعريف الوظيفة من جزأين ، أي رأس الوظيفة والجسم الوظيفي

رأس الوظيفة: رأس الوظيفة هو نفس إعلان الوظيفة بدون الفاصلة المنقوطة. يحتوي رأس الوظيفة على اسم الوظيفة والمعلمة ونوع الإرجاع.

  • نوع الإرجاع: نوع الإرجاع هو نوع بيانات القيمة التي ستُرجعها الوظيفة. قد تقوم الدالة بإرجاع قيمة أو لا. إذا حدث ذلك ، فيجب تحديد نوع بيانات قيمة إعادة التوليف ، وإلا يجب أن يكون نوع الإرجاع باطلاً.

  • اسم وظيفة: هذا هو اسم الوظيفة التي يمكننا من خلالها استدعاء الوظيفة عند الحاجة.

  • المعلمات: المعلمات هي قيم الإدخال التي سيتم تمريرها إلى الوظيفة. إنه يخبر عن أنواع البيانات الخاصة بالوسيطات وترتيبها وعدد الوسائط التي سيتم تمريرها إلى الوظيفة. المعلمات اختيارية. يمكنك أيضًا الحصول على وظائف بدون معلمات.

هيئة الوظيفة: جسم الوظيفة هو مجموعة البيان التي تؤدي مهمة محددة. يحدد ما تفعله الوظيفة.

مثال:

int add (int x، int y) {int sum = x + y return (sum)}

يوصى بالتصريح عن دالة قبل تعريفها واستخدامها. في C ، يمكننا الإعلان عن الوظيفة وتعريفها في نفس المكان.

مثال:

#include int add (int، int) // وظيفة تعريف // تعريف الوظيفة int add (int x، int y) // function header {// function body int sum = x + y return (sum)} // الوظيفة الرئيسية int main () {int sum = add (23، 31) printf ('٪ d'، sum) return 0}

كما نرى في المثال أعلاه ، فإننا نستدعي الدالة باستخدام عبارة int sum = add (23 ، 31). يتم تخزين القيمة المعادة من الدالة في متغير المجموع.

قبل أن نمضي قدمًا ، هناك مفهوم واحد أكثر أهمية لفهمه حول الوصية. هناك نوعان من المعلمات:

المعامل الفعلي : تُعرف تلك المعلمات التي يتم تمريرها إلى الوظائف أثناء استدعائها بالمعامل الفعلي. على سبيل المثال ، 23 و 31 في المثال أعلاه هي المعلمات الفعلية.

المعلمة الرسمية : تُعرف تلك المعلمات التي تتلقاها الوظائف باسم المعلمات الرسمية. على سبيل المثال ، x & y في المثال أعلاه هي المعلمات الرسمية.

دعنا نتقدم سريعًا ونفهم الطرق المختلفة لاستدعاء دالة في C.

استدعاء وظيفة

هناك طريقتان يمكننا من خلالهما استدعاء دالة:

  • اتصل بالقيمة
  • اتصل بالإشارة

اتصل بالقيمة

في طريقة الاستدعاء حسب القيمة ، يتم تمرير قيمة المعلمة الفعلية كوسيطة للدالة. لا يمكن تغيير قيمة المعلمة الفعلية بواسطة المعلمات الرسمية.

في طريقة الاستدعاء تكون القيمة ، يتم تخصيص عنوان ذاكرة مختلف للمعلمات الرسمية والفعلية. يتم نسخ قيمة المعلمة الفعلية فقط إلى المعلمة الرسمية.

مثال:

#include void Call_By_Value (int num1) {num1 = 42 printf ('nInside Function، Number is٪ d'، num1)} int main () {int num num = 24 printf ('nBefore Function، Number is٪ d'، num ) Call_By_Value (num) printf ('nAfter Function، Number is٪ dn'، num) return 0}

انتاج |

في المثال أعلاه ، قبل استدعاء دالة القيمة ، تكون قيمة num هي 24. وبعد ذلك ، بمجرد استدعاء الوظيفة وتمرير القيمة ، وتغييرها داخل الدالة ، تصبح 42. عندما نعود ونطبع القيمة مرة أخرى من num في الوظيفة الرئيسية ، يصبح 24.

اتصل بالإشارة

نموذج تحكم في جافا

في الاتصال بالإشارة ، يتم تمرير عنوان الذاكرة للمعامل الفعلي إلى الوظيفة كوسيطة. هنا ، يمكن تغيير قيمة المعلمة الفعلية بواسطة المعلمة الرسمية.

يتم استخدام نفس عنوان الذاكرة لكل من المعلمة الفعلية والرسمية. لذلك ، إذا تم تعديل قيمة المعلمة الرسمية ، فإنها تنعكس من خلال المعلمة الفعلية أيضًا.

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

الآن ، هذا المتغير num1 سيخزن عنوان الذاكرة للمعامل الفعلي. لذلك ، لطباعة القيمة المخزنة في عنوان الذاكرة المشار إليه بالرقم 1 ، نحتاج إلى استخدام عامل الإشارة ، أي *. إذن ، قيمة * num1 هي 42.

يستخدم عامل العنوان & للحصول على عنوان متغير من أي نوع بيانات. لذلك في عبارة استدعاء الوظيفة 'Call_By_Reference (& num)' ، يتم تمرير عنوان num بحيث يمكن تعديل num باستخدام عنوانها.

مثال

#include // تعريف الوظيفة باطل Call_By_Reference (int * num1) {* num1 = 42 printf ('nInside Function، Number is٪ d'، * num1)} // Main Function int main () {int num num = 24 printf ( 'n قبل الوظيفة ، الرقم هو٪ d' ، العدد) Call_By_Reference (& num) printf ('nAfter Function، Number is٪ dn'، num) return 0}

انتاج |

في هذا المثال ، قيمة num هي 24 مبدئيًا ، داخل الوظيفة الرئيسية. بمجرد تمريرها إلى وظيفة Call_By_Reference وتعديل القيمة بواسطة المعلمة الرسمية ، تم تغييرها للمعامل الفعلي أيضًا. هذا هو السبب في أننا عندما نطبع قيمة الأسطوانات بعد الوظيفة ، فإنها تطبع 42.

المضي قدما مع أنواع الوظائف المعرفة من قبل المستخدم في لغة سي

أنواع المعرفة من قبل المستخدم وظيفة في ج

هناك أنواع مختلفة من الوظائف المعرفة من قبل المستخدم بناءً على نوع الإرجاع والوسيطات التي تم تمريرها.

المضي قدمًا بدون تمرير وسيطات وبدون قيمة إرجاع

1. لا توجد حجج مرت ولا قيمة عائد

بناء الجملة:

إعلان الوظيفة:

دالة باطلة () استدعاء دالة: دالة () تعريف دالة: دالة باطلة () {عبارات}

مثال

كيفية إنشاء فصل مفرد في جافا
#include void add () void add () {int x = 20 int y = 30 int sum = x + y printf ('sum٪ d'، sum)} int main () {add () return 0}

المضي قدمًا بدون تمرير أي وسيطات ولكن القيمة المرجعة

2 لم يتم تمرير أي وسيطات ولكن القيمة المرجعة

بناء الجملة:

إعلان الوظيفة:

int function () function call: function () تعريف الوظيفة: int function () {statement return a}

مثال:

#include int add () int add () {int x = 20 int y = 30 int sum = x + y return (sum)} int main () {int sum sum = add () printf ('sum٪ d'، المجموع) عودة 0}

المضي قدما مع تمرير الوسيطات ولكن بدون قيمة إرجاع

3 تم تمرير الوسيطة ولكن بدون قيمة إرجاع

بناء الجملة:

إعلان الوظيفة:

استدعاء دالة دالة باطل (int): دالة (أ) تعريف دالة: دالة باطلة (int a) {عبارات}

مثال:

#include void add (int، int) void add (int x، int y) {int sum = x + y return (sum)} int main () {add (23، 31) return 0}

المضي قدمًا مع تمرير الوسيطة وقيمة الإرجاع

4 تم تمرير الوسيطة والقيمة المرجعة

بناء الجملة:

إعلان الوظيفة:

int function (int) function call: function (a) تعريف الدالة: int function (int a) {statement return a}

مثال

#include int add (int، int) int add (int x، int y) {int sum = x + y return (sum)} int main () {int sum = add (23، 31) printf ('٪ d' ، sum) return 0}

الآن دعونا نلقي نظرة سريعة على وظائف مكتبة C المهمة لكتابة برنامج.

وظائف المكتبة ج

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

على سبيل المثال ، لاستخدام وظائف printf / scanf ، نحتاج إلى تضمين stdio.h في برنامجنا ، والذي يوفر وظائف تتعلق بالإدخال / الإخراج القياسي.

فيما يلي قائمة بملفات الرأس.

واحدstdio.hملف رأس الإدخال / الإخراج القياسي
2سكملف رأس الإدخال / الإخراج لوحدة التحكم
3سلسلة. hوظائف المكتبة المرتبطة بالسلسلة مثل get () ، و puts () ، إلخ.
4stdlib.hوظائف المكتبة العامة مثل malloc () و calloc () و exit () وما إلى ذلك.
5رياضياتوظائف متعلقة بالعمليات الحسابية مثل sqrt () ، pow () ، إلخ.
6الوقتوظائف متعلقة بالوقت
7ctype.hوظائف التعامل مع الأحرف
8stdarg.hدوال الوسيطة المتغيرة
9إشارةوظائف التعامل مع الإشارة
10setjmp.hوظائف الانتقال
أحد عشرlocale.hوظائف اللغة
12يخطئوظائف معالجة الأخطاء
13تأكيدوظائف التشخيص

الآن بعد الاطلاع على وظائف C المذكورة أعلاه ، ستفهم كل فارق بسيط من الوظائف وكيفية تنفيذها في لغة C. آمل أن تكون هذه المدونة مفيدة وذات قيمة مضافة لك.

وهكذا وصلنا إلى نهاية هذه المقالة حول 'الوظائف في ج'. إذا كنت ترغب في معرفة المزيد ، تحقق من ، شركة تعليمية موثوقة عبر الإنترنت. تم تصميم دورة تدريب وإصدار شهادات Java J2EE و SOA من Edureka لتدريبك على مفاهيم Java الأساسية والمتقدمة جنبًا إلى جنب مع العديد من أطر Java مثل Hibernate & Spring.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات في هذه المدونة وسنعاود الاتصال بك في أقرب وقت ممكن.