C – ۷

برنامه های چندتابعی یا Multiple Functions

در این قسمت قصد داریم تا کاملا شیوا و ملموس با ارائه مثالی واقعا ساده نحوه کار برنامه های چند تابعی رو شرح بدیم.
شیوه ای که در استانداردهای ANSI/ISO C برای برنامه های چند تابعی ذکر شده، شیوه نمونه سازی تابع یا Function Prototyping است. از اسم قلمبه سلمبه اش نترسید. خیلی سرراست و آسونه.
در برنامه جدیدمون از کاربر میخوایم ۲ تا عدد صحیح وارد کنه برای جمع زدن. بعد دوتا تابع میسازیم. تابع اولی نتیجه حاصل جمع رو خودش مستقیما چاپ کنه و تابع دوم نتیجه رو به تابع اصلی ارسال کنه. شروع کنیم به نوشتن شبه کد این برنامه:

۱- تعریف دو تابع. هردو ۲ مقدار صحیح میپذیرند. یکی ازونها هیچی بر نمیگردونه ولی اون یکی حاصل جمع صحیح رو برمیگردونه.

۲- تعریف دو متغیر از نوع داده صحیح.

۳- نمایش مناسب خروجی.

خب بریم سروقت نوشتن کدهای برنامه‌مون. در شیوه پروتوتایپ، قبل از تابع ()main میایم و توابع دیگرمون رو صرفا معرفی میکنیم. یعنی به کامپایلر میگیم که این توابع هم وجود دارند داخل برنامه.

calculator.c

من اول برنامه رو نوشتم تا بعد اون رو توضیح بدم از روی خودش.

چهار خط اول کامنتهامون هستند. من برای قشنگیش به این صورت نوشتم. شما میتونید طبق روشهایی که گفته شده هرجور دوست داشتید کامنتتون رو بنویسشید.

خط پنجم استفاده از دستور پیش‌پردازنده include برای لحاظ کردن هدر stdio.h که برای ()printf لازمه.

خط ششم اعلان پروتوتایپ تابعه. به کامپایلر میگیم تابعی با این اسم و مشخصات داریم. اسم این تابع رو calc_direct گذاشتیم. چون مستقیما نتیجه رو محاسبه میکنه و نشون میده. و حاصل جمع رو به تابع ()main نمیفرسته. اون void دقیقا گویای همین مطلبه. اما دوتا آرگومان از نوع داده صحیح رو بهش میدیم که اونا رو جمع کنه. پس داخل پرانتز همینا رو نوشتیم. به سمیکالن پس از اعلان پروتوتایپ تابع توجه کنید.

خط هفتم مثل خط ششمه با این تفاوت که گفتیم نتیجه رو محاسبه کن و به تابع صدازننده که در اینجا ()main هست نتیجه رو بفرست. اون int به این معنیه که نتیجه‌ای که بدست میاد عدد صحیحه.

در بدنه تابع اصلی همه چیز گویاست و قبلا کامل توضیح داده شده. دوتا متغیر از نوع عدد صحیح اعلان شدن. در دو خط بعدی این دو متغیر تعریف شدند.

در خط پانزدهم تابع ()calc_direct رو فراخوانی کردیم یا صدا زدیم و بهش دوتا متغیر پاس دادیم. وقتی برنامه به اینجا رسید کنترل از ()main خارج میشه و به ()calc_direct منتقل میشه. تابع ()calc_direct بعد از بلوک تابع ()main تعریف شده. ورودی‌هایی که به تابع ()calc_direct میرسه همون num1 و num2 هستند که برای تابع جدید تحت نام جدیدی بنام a و b در دسترس قرار گرفته‌اند. گفتیم که متغیر نامی برای مکانهای حافظه هستند. اینکه ما با اسمهای مختلف اونا رو بشناسیم ماهیتشون رو عوض نمیکنه. چنانچه عوض کردن نام در شناسنامه، ماهیت وجودی هیچ انسانی رو تغییر نمیده.. حالا این تابع میاد و اون اعداد رو باهم جمع میکنه و خودش نتیجه رو چاپ میکنه بوسیله تابع ()printf. به محض اتمام کارش، کنترل به تابع ()main برمیگرده. تابع ()main میره جلو و به ()printf میرسه. در اینجا همه چی طبق چیزهایی که قبلا گفته شده پیش میره تا اینکه به آرگومان چهارم یعنی (num1, num2)calc_return میرسه. در اینجا بهش گفته شده این دو مقدار رو به تابع ()calc_return بده و تابع ()calc_return رو صدا بزن. به محض این فراخوانی کنترل برنامه از تابع ()printf خارج میشه و به در اختیار ()calc_return قرار میگیره. کار این تابع راحته. اون دو مقدار رو حالا تحت عناوین جدیدی به نامهای x و y میگیره. حاصلشون رو جمع میکنه و میفرسته. به کی؟ به اونی که صداش زده. به تابع ()printf. دوباره کنترل به ()printf برمیگرده. حالا مقدار بازگشتی اون تابع رو هم داره که در d% سوم قرار میگیره. سرراست و قشنگ. چیزی که در برنامه‌نویسی مطرحه منطقه. با منطق و درست پیش برید همه چیز گویاست.


درباره نویسنده: titanstrix

مطالب زیر را حتما بخوانید

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *