القائمة الرئيسية

الصفحات

C - Functions / الدوال

- Functions / الدوال

 الوظيفة هي مجموعة من العبارات التي تؤدي معًا مهمة. يحتوي كل برنامج C على وظيفة واحدة على الأقل ، وهي main () ، ويمكن لجميع البرامج البسيطة تحديد وظائف إضافية.

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

يخبر إعلان الوظيفة المترجم عن اسم الوظيفة ونوع الإرجاع والمعلمات. يوفر تعريف الوظيفة الجسم الفعلي للوظيفة.

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

يمكن أيضًا الإشارة إلى الوظيفة على أنها طريقة أو إجراء فرعي أو إجراء ، إلخ.

تحديد الوظيفة

الشكل العام لتعريف الوظيفة في لغة البرمجة C هو كما يلي -

return_type function_name( parameter list ) {
   body of the function
}

وهناك تعريف وظيفة في البرمجة C يتكون من رأس وظيفة و ظيفة الجسم . فيما يلي جميع أجزاء الوظيفة -

  • نوع الإرجاع - قد ترجع الدالة قيمة. نوع return هو نوع البيانات للقيمة التي تُرجعها الدالة. تقوم بعض الوظائف بتنفيذ العمليات المطلوبة دون إرجاع قيمة. في هذه الحالة ، فإن return_type هي الكلمة الأساسية void .

  • اسم الوظيفة - هذا هو الاسم الفعلي للوظيفة. يشكل اسم الوظيفة وقائمة المعلمات معًا توقيع الوظيفة.

  • المعلمات - تشبه المعلمة عنصرًا نائبًا. عندما يتم استدعاء دالة ، تقوم بتمرير قيمة إلى المعلمة. يشار إلى هذه القيمة كمعامل أو وسيطة فعلية. تشير قائمة المعلمات إلى نوع معاملات الوظيفة وترتيبها ورقمها. المعلمات اختيارية ؛ بمعنى ، قد لا تحتوي الوظيفة على معلمات.

  • جسم الوظيفة - يحتوي جسم الوظيفة على مجموعة من العبارات التي تحدد وظيفة الوظيفة.

مثال

فيما يلي رمز المصدر لوظيفة تسمى max () . تأخذ هذه الوظيفة معلمتين num1 و num2 وتُرجع القيمة القصوى بينهما -

/* function returning the max between two numbers */
int max(int num1, int num2) {

   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

إقرارات الوظيفة

يخبر إعلان الوظيفة المترجم عن اسم الوظيفة وكيفية استدعاء الوظيفة. يمكن تعريف الجسم الفعلي للوظيفة بشكل منفصل.

يحتوي إعلان الوظيفة على الأجزاء التالية -

return_type function_name( parameter list );

بالنسبة للوظيفة المحددة أعلاه max () ، يكون إعلان الوظيفة كما يلي -

int max(int num1, int num2);

أسماء المعامِلات ليست مهمة في إعلان الوظيفة فقط نوعها مطلوب ، لذلك ما يلي هو أيضًا إعلان صالح -

int max(int, int);

إعلان الوظيفة مطلوب عند تحديد دالة في ملف مصدر واحد واستدعاء هذه الوظيفة في ملف آخر. في مثل هذه الحالة ، يجب أن تعلن عن الوظيفة في أعلى الملف التي تستدعي الوظيفة.

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

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

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

لاستدعاء دالة ، ما عليك سوى تمرير المعلمات المطلوبة مع اسم الوظيفة ، وإذا كانت الدالة ترجع قيمة ، فيمكنك تخزين القيمة التي تم إرجاعها. على سبيل المثال -


#include <stdio.h>
 
/* function declaration */
int max(int num1, int num2);
 
int main () {

   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;
 
   /* calling a function to get max value */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* function returning the max between two numbers */
int max(int num1, int num2) {

   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

لقد احتفظنا بـ max () جنبًا إلى جنب مع main () وقمنا بتجميع شفرة المصدر. أثناء تشغيل الملف القابل للتنفيذ النهائي ، سيؤدي إلى النتيجة التالية -

Max value is : 200

الحجج الوظيفية

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

تتصرف المعلمات الرسمية مثل المتغيرات المحلية الأخرى داخل الوظيفة ويتم إنشاؤها عند الدخول إلى الوظيفة ويتم إتلافها عند الخروج.

أثناء استدعاء دالة ، هناك طريقتان يمكن من خلالهما تمرير الوسيطات إلى الدالة -

الأب رقم.نوع المكالمة ووصفها
1اتصل بالقيمة

تنسخ هذه الطريقة القيمة الفعلية لوسيطة إلى المعلمة الرسمية للدالة. في هذه الحالة ، لا تؤثر التغييرات التي تم إجراؤها على المعلمة داخل الدالة على الوسيطة.

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

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

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


الصفحة التالية                                                                   الصفحة السابقة 

هل اعجبك الموضوع :

تعليقات