توابع (Functions) کمک میکنن کارهای بزرگ محاسباتی رو به تکههای کوچیکتر تقسیم کنیم،
و به برنامهنویسها اجازه میدن بهجای اینکه از صفر شروع کنن، از کار بقیه استفاده کنن و روش بسازن.
تابعهای درست و بهجا، جزئیات اجرای خودشون رو از قسمتهایی از برنامه که نیازی به دونستن اون جزئیات ندارن پنهان میکنن،
در نتیجه باعث میشن کل برنامه واضحتر و تغییر دادن اون راحتتر بشه.
زبان C طوری طراحی شده که توابع در اون سریع و راحت استفاده بشن؛
به همین خاطر، برنامههای C معمولاً از تعداد زیادی تابع کوچک ساخته میشن،
نه از چند تابع خیلی بزرگ.
یه برنامه ممکنه توی یه یا چند فایل منبع (source file) قرار بگیره.
فایلهای منبع میتونن جداگانه کامپایل بشن و بعد با همدیگه و با توابعی که قبلاً از کتابخونهها کامپایل شدن، بارگذاری بشن.
ما وارد جزئیات این فرایند نمیشیم، چون این موضوع از یه سیستم تا سیستم دیگه فرق داره.
جایی که استاندارد ANSI بیشترین تغییر رو توی C ایجاد کرده، بخش تعریف و اعلان تابعهاست.
همونطور که تو فصل ۱ دیدیم، حالا میشه موقع اعلان تابع، نوع آرگومانها رو هم مشخص کرد.
نحوهی نوشتن اعلان تابع (declaration) و تعریف تابع (definition) هم تغییر کرده
تا این دو تا با هم سازگار بشن.
به لطف این تغییر، حالا کامپایلر میتونه خطاهای بیشتری رو نسبت به قبل تشخیص بده.
علاوه بر این، وقتی آرگومانها درست اعلان بشن، تبدیل نوع (type coercion) بهصورت خودکار انجام میشه.
استاندارد همچنین قوانین مربوط به دامنهی نامها (scope) رو واضحتر کرده؛
بهطور خاص، مشخص کرده که باید فقط یه تعریف از هر شیء خارجی (external object) وجود داشته باشه.
مقداردهی اولیه (Initialization) هم گستردهتر شده —
الان حتی آرایهها و ساختارهای خودکار (automatic arrays & structs) هم میتونن مقدار اولیه بگیرن.
پیشپردازندهی C (C Preprocessor) هم تقویت شده.
قابلیتهای جدیدش شامل مجموعهی کاملتری از دستورات کامپایل شرطی (conditional compilation)،
راهی برای ساخت رشتههای کوتیشندار از آرگومانهای ماکرو،
و کنترل بهتر روی فرایند گسترش ماکروها (macro expansion) هست.