لینک کوتاه مطلب : https://hsgar.com/?p=4466

فرق میان فایل‌های با پسوند .h و .c

در زبان برنامه‌نویسی سی با دو نوع فایل سر و کار داریم نوع اولی پسوند c دارد و نوع دومی پسوند h دارد. حتما این را می‌دانید که فایل‌های با پسوند c سورس نام دارند و با پسوند h سرآیند یا هدر نام دارند. خوب تفاوت بین سورس‌ها و هدرها چیست؟ در حقیقت این گونه باید می‌پرسیدید.

جواب از لحاظ فنی هیچ تفاوتی میان سورس‌ها و هدرها نیست. یعنی کامپایلر هیچ تفاوتی میان هدر و سورس قائل نمی‌شود ولی برخی کامپایلرها فایل‌های هدر را کامپایل نمی‌کنند و می‌گویند باید این‌ها انکلود شده باشند.

یعنی فایل هدر باید در فایل سورس انکلود شده باشد. اما از لحاظ مفهومی چرا تفاوت دارد و خیلی هم تفاوت مهم دارد:

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

فایل هدر را می‌توانیم در چندین فایل سورس انکلود کنیم. خوب حالا اگر ما پیاده‌سازی را در هدر قرار بدهیم، چون فایل‌های .h پس از کامپایل کل برنامه در چندین فایل .o وجود دارند، لینکر شاکی می‌شود و می‌گوید چه خبر است چندین بار یک نماد را تعریف کردید. به این دلیل که چرا ما نباد شیوه پیاده‌سازی یا همان تعاریف توابع را در فایل‌های .h قرار بدهیم.

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

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.