
++C به برنامهنویس امکان میدهد که تابع خاص خود را تعریف کند. تابع تعریف شده از سوی کاربر به گروهبندی کد میپردازد تا وظیفه خاصی را اجرا کند و این گروه کد یک نام (شناسه) دارد. زمانی که تابع از هر بخش از برنامه فراخوانی شود، کدهای تعریف شده در بدنه تابع را اجرا میکند.

به تصویر فوق توجه کنید. زمانی که یک برنامه شروع به اجرا میکند، سیستم تابع ()main را فراخوانی میکند، یعنی سیستم شروع به اجرای کد از تابع ()main میکند. زمانی که کنترل برنامه به ()function_name درون ()main برسد، به ()void function_name انتقال مییابد و همه کدهای درون آن را اجرا میکند. سپس کنترل برنامه مجدداً به تابع main بازمیگردد و چنان که در تصویر فوق مشخص است، کد پس از فراخوانی ()function_name اجرا میشود.
مثال: برنامه ++C زیر، دو عدد صحیح را با هم جمع میکند. یک تابع به نام ()add ایجاد میکند تا اعداد صحیح را با هم جمع کند و مجموع را در تابع ()main نمایش دهد.
#include <iostream> using namespace std; // Function prototype (declaration) int add(int, int); int main() { int num1, num2, sum; cout<<"Enters two numbers to add: "; cin >> num1 >> num2; // Function call sum = add(num1, num2); cout << "Sum = " << sum; return 0; } // Function definition int add(int a, int b) { int add; add = a + b; // Return statement return add; }
اعلان پروتوتایپ تابع
اگر یک تابع تعریف شده از سوی کاربر پس از تابع ()main تعریف شود، کامپایلر خطایی نمایش خواهد داد. دلیل این امر آن است که کامپایلر از وجود تابع تعریف شده از سوی کاربر، نوع آرگومانهای ارسالی به تابع و نوع بازگشتی آن ناآگاه است.
پروتوتایپ تابع در ++C یک اعلان از تابع بدون بدنه است که اطلاعاتی را در مورد تابع تعریف شده از سوی کاربر در اختیار کامپایلر قرار میدهد. پروتوتایپ تابع در مثال فوق به صورت زیر است:
int add(int، int);
چنان که ملاحظه میکنید، در پروتوتایپ تابع هیچ بدنهای ندارد. ضمناً تنها نوع بازگشتی آرگومانها ذکر شده و خبری از خود آرگومانها نیست. پروتوتایپ تابع را میتوان به شکل زیر نیز اعلان کرد، اما لزومی به نوشتن آرگومانها وجود ندارد:
int add(int a، int b);
نکته: اگر بخواهیم تابعی را پس از فراخوانی آن تعریف کنیم، باید حتماً از پروتوتایپ کردن تابع استفاده شود. یعنی قبل از تابع main پروتوتایپ نوشته میشود و به این صورت میتوان در داخل تابع main پیش از تعریف تابع مربوطه، آن را فراخوانی و از آن استفاده کرد.
فراخوانی تابع
برای اجرای کد بدنه تابع، تابع تعریف شده از سوی کاربر باید احضار یا فراخوانی شود. در برنامه فوق دستور زیر:
add(num1, num2);
درون ()main تابع تعریف شده کاربر را فراخوانی میکند. بدین ترتیب تابع یک عدد صحیح بازگشت میدهد که در متغیر add ذخیره میشود.
تعریف تابع
خود تابع به صورت تعریف تابع مورد ارجاع قرار میگیرد. تعریف تابع در برنامه فوق به صورت زیر است:
// Function definition int add(int a,int b) { int add; add = a + b; return add; }
زمانی که تابعی فراخوانی میشود، کنترل به گزاره اول بدنه تابع انتقال مییابد. سپس گزارههای دیگر در بدنه تابع به ترتیب اجرا میشوند. هنگامی که همه کدهای درون تعریف تابع اجرا شدند، کنترل برنامه به برنامه فراخوانی کننده بازگشت مییابد.
ارسال آرگومان به تابع
پارامتر آرگومان در برنامهنویسی، اشاره به دادههایی دارد که در زمان فراخوانی تابع به آن ارسال میشوند. در مثال فوق، دو متغیر num1 و num2 در طی فراخوانی تابع به آن ارسال میشوند. این آرگومانها به نام آرگومانهای واقعی شناخته میشوند. مقدار num1 و num2 به ترتیب با متغیرهای a و b مقداردهی میشوند. این آرگومانهای a و b به نام آرگومانهای صوری شناخته میشوند.
این وضعیت در شکل زیر نمایش یافته است:

نکاتی در مورد ارسال آرگومانها
تعداد آرگومانهای واقعی و آرگومانهای صوری باید یکسان باشند. تنها استثنا در زمان Overload کردن تابع است.
نوع آرگومان واقعی اول باید با نوع آرگومان صوری اول مطابقت داشته باشد. به طور مشابه، نوع آرگومان واقعی دوم باید با نوع آرگومان صوری دوم مطابقت پیدا کند و همین طور تا آخر.
میتوان تابعی را بدون ارسال آرگومان نیز فراخوانی کرد. تعداد آرگومانهای ارسالی به یک تابع به شیوهای که برنامهنویس برای حل مسئله مربوطه انتخاب کرده است وابستگی دارد.
در برنامه فوق، هر دو آرگومان از نوع int هستند، اما لزومی نیست که هر دو آرگومان از نوع واحدی باشند.
گزاره بازگشت
هر تابعی میتواند با استفاده از گزاره Return یک مقدار منفرد به برنامه فراخوانی کننده بازگشت دهد. در برنامه فوق، مقدار add از تابع تعریف شده از سوی کاربر با استفاده از گزاره زیر به برنامه فراخوانی کننده بازگشت مییابد:
return add;
تصویر زیر طرز کار گزاره return را نشان میدهد:

در برنامه فوق، مقدار add درون تابع تعریف شده کاربر به تابع فراخوانی کننده بازگشت مییابد. سپس این مقدار در متغیر sum ذخیره میشود. توجه داشته باشید که متغیر بازگشت یافته یعنی add از نوع int و متغیر sum نیز از نوع int است. ضمناً توجه کنید که نوع بازگشتی یک تابع در اعلان تابع تعریف میشود:
int add(int a، int b)
عبارت int در دستور اعلان فوق به این معنی است که این تابع باید مقداری با نوع int بازگشت دهد. اگر هیچ مقداری به تابع فراخوانی کننده بازگشت نیابد، در این صورت باید از نوع void استفاده کنید.
Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com