هدف کلی
آشنایی با توابع، پارامترهای خط فرمان، آرگومانهای argc و argv و حافظه‌های C
هدفهای رفتاری
از دانشجو انتظار مي‌رود پس از مطالعة این فصل،
1. تابع و انواع آن را تعریف کند.
2. مزایای تعریف تابع فرعی را بیان کند.
3. عناصر تشکیل‌دهندة هر تابع را بشناسد.
4. کاربرد دستور return را بیان کند.
5. نحوة فراخوانی تابع را بشناسد.
6. روش انتقال آرایه به تابع را بیان کند.
7. روشهای تعریف پارامتری که اشاره‌گر آرایه دریافت مي‌کند بیان کند.
8. توابع بازگشتی یا خودگردی را بشناسد.
9. پارامترهای خط فرمان را بشناسد.
10. آرگومانهای argc و argv را بشناسد.
11. تفاوت فراخوانی توابع در C و پاسکال را بیان کند.
12. متغیرهای محلی یا خصوصی و متغیرهای عمومی را بشناسد.
13. کلاس حافظه و کاربرد هریک را شرح دهد.
مقدمه
در حالت كلي و بدون توجه به زبان برنامه‌نویسیخاص، برنامة مورد نظر براي پياده‌سازي هر پیمانه یا ماژول را زيربرنامه گويند. در زبان پاسكال به آنها تابع يا رويه گویند. پيمانه يا ماژول را در زبان C تابع نامند؛ يعني براي پياده‌سازي هر ماژول مي‌توان يك تابع نوشت. تابع قطعه برنامه‌اي کامل است که کار معيني انجام مي‌دهد و موجب جلوگيري از برنامه‌‌نويسي تکراري در بين برنامه‌‌ها مي‌شود.
گفتیم هر برنامه در زبان C، مجموعه‌اي از يك يا چندين تابع است كه يكي و فقط يكي از آنها تابع اصلي یا main است و بقيه تابع فرعي‌اند. توابع به دو گروه دسته‌بندي مي‌شوند. يك سري توابع از پيش تعريف شده‌اند و آنها را توابع كتابخانه‌اينامند. كتابخانة استاندارد C، مجموعه‌اي غني از اين گونه توابع دارد كه محاسبات رياضي، انجام عمليات روي نوشته‌ها و كاراكترها، انجام عمليات ورودي و خروجي، انجام عمليات در زمينه‌هاي گرافيكي و جز آن را به عهده دارند كه متداول‌ترين آنها را بررسي می‌کنیم. توربو C و همين طور گونه‌هاي ديگر C، از اين لحاظ كتابخانه‌هاي گسترده‌تري دارند كه آنها را نيز به اختصار بررسي می‌کنیم. وجود اين ‌گونه توابع از پيش‌ تعريف شده كار برنامه‌نويسان را ساده‌تر می‌کند و توانمندي آنها را براي نوشتن برنامه‌هاي كارآمد بالا مي‌برد.
گروه ديگر از توابع فرعي را برنامه‌نويس تعريف مي‌کند. C، مشابه ساير زبانهاي برنامه‌نویسي، اجازه مي‌دهد كه برنامه‌نويس، برحسب سليقة خود، زيربرنامه‌هايي را به عنوان تابع فرعي طراحي كند و آنها را برحسب نياز در برنامه يا تابع اصلي و يا ساير توابع فراخواند. اين شيوه، به برنامه‌نویس امكان مي‌دهد كه برنامه‌ای بزرگ را به صورت ماژول‌‌شده طراحي کند؛ يعني كار يا پروژة مورد نظر را به قسمتهاي كوچك‌تري تجزيه کند، براي هر قسمت يك تابع بنويسد و آنها را به كمك تابع اصلي به يكديگر پيوند دهد و برحسب لزوم آنها را فراخواند.
<!--[if !vml]--><!--[endif]-->طراحي برنامه به صورت پيمانه‌اي يا ماژول‌‌شده، يعني به صورت مجموعه‌اي از توابع، مزايايي دارد كه مهم‌ترين آنها عبارت‌اند از:
ـ امکان استفادة مجدد از تابع
ـ ساده ‌شدن كنترل و خطايابي
ـ امکان انجام تغييرات در برنامه و اصلاح آن
ـ امكان همكاري برنامه‌نويسان متعدد در نوشتن يك برنامه.
در اين فصل ايجاد و کاربرد توابع را بررسي می‌کنیم.
نحوة تعريف تابع
چنانکه گفتیم هر برنامة C‌ از يك يا چندين تابع تشكيل مي‌گردد كه فقط يكي از آنها تابع اصلي است. به طور كلي هر تابع شامل عناصر زير است:
- عنوان تابع كه شامل نام تابع، نوع تابع و آرگومانهاي تابع است. تابع بايد از لحاظ نوعتوصيف شود که قبل از نام آورده مي‌شود و مشخص مي‌کند كه تابع چه نوع مقداري را برمي‌گرداند. در صورتي که تابع آرگومان داشته باشد به دنبال نام تابع و درون يك جفت پرانتز، آرگومانهاي تابع درج مي‌شود. همچنين نوع هر آرگومان نيز بايد اعلان شود.آرگومانها با ويرگول از هم جدا مي‌شوند. اگر تابع مقدار صحيح برمي‌گرداند، تعريف نوع را مي‌توان حذف کرد. در صورتي که تابع آرگومان نداشته باشد، يک جفت پرانتز خالي به دنبال نام آن مي‌‌آيد.
- بدنة تابعکه شامل موارد زير است:
الف) اعلان متغيرهاي محلي. هر متغيري را كه جزء آرگومانهاي تابع نباشد و به عبارت ديگر مخصوص خود تابع باشد متغير محلي نامند و بايد در آغاز تابع پس از عنوان تابع اعلان گردد.متغيرهاي محلي خارج از تابع شناخته نمي‌شوند.
ب) ساير دستورهاي تابع. متن تابع و دستورهاي اجرايي در اين قسمت واقع مي‌شود و شامل دستورهاي محاسباتي، دستورهاي کنترلي و حتي دستور فراخواني خود تابع است. شكل 6ـ1 عناصر يك تابع را نمايش مي‌دهد.
وقتي كه تابعي در داخل تابع اصلي فراخواني مي‌شود، اصطلاح آرگومان به كار می‌رود.

شکل 6ـ1 عناصر اصلی تابع

ولي در خود تابع فرعي، يعني در تعريف تابع فرعي، اصطلاح پارامتر به كار می‌رود.