hamsa.dev
hamsa.dev
خواندن ۲ دقیقه·۳ سال پیش

تفاوت definition و declaration در C

Difference between Definition and Declaration
Difference between Definition and Declaration


در ادامه به تفاوت اعلان (Declaration) و تعریف (Definition) متغیر ها و توابع در زبان C خواهیم پرداخت که یکی از سوالات همیشگی در مصاحبه های کاری مربوط به این زبان برنامه نویسی هست خواهیم پرداخت.




اعلان کردن (Declaration) یک متغیر برای اطلاع دادن اطلاعات زیر به کامپایلر است: نام متغیر، نوع مقداری که داردذخیره می کند و مقدار اولیه در صورت نیاز. به عنوان مثال، اعلان جزئیاتی در مورد ویژگی های یک متغیر می دهد. در حالی که تعریف کردن (Definition) متغیر می گوید که متغیر کجا ذخیره می شود. یعنی حافظه برای متغیر در طول تعریف متغیر تخصیص داده می شود.

در زبان C تعریف و اعلان یک متغیر به طور همزمان صورت می گیرد. یعنی هیچ تفاوتی بین اعلان و تعریف وجود ندارد. به عنوان مثال، به نحوه تعریف متغیر در زیر توجه کنید:

int a;

در اینجا اطلاعاتی مانند نام متغیر: a و نوع داده: int به کامپایلر ارسال می شود که در ساختار داده (data structure) که به عنوان جدول نمادها (symbol table) شناخته می شود ذخیره می شود. همراه با این، حافظه ای به اندازه 2 بایت (بسته به نوع کامپایلر) به متغیر a اختصاص داده می شود.

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

extern int a;

در این مثال فقط اطلاعات مربوط به متغیر ارسال می شود و هیچ تخصیص حافظه ای انجام نمی شود. اطلاعات بالا به کامپایلر می گوید که متغیر a اکنون اعلان شده است در حالی که حافظه برای آن بعداً در همان فایل یا در فایل دیگری تعریف خواهد شد.

اعلان یک تابع، نام تابع، تعداد و نوع آرگومان هایی که می گیرد و نوع برگشت آن (نوع داده ای که return می کند) را در اختیار کامپایلر قرار می دهد. برای مثال کد زیر را در نظر بگیرید

int add(int, int);

در اینجا تابعی به نام add با 2 آرگومان از نوع int و نوع بازگشتی int اعلان می شود. حافظه در این مرحله تخصیص نخواهد یافت.

تعریف تابع برای تخصیص حافظه برای تابع استفاده می شود. به عنوان مثال تعریف تابع زیر را در نظر بگیرید،

int add(int a, int b) { return (a+b); }

در طول این تعریف تابع، حافظه برای تابع add تخصیص داده می شود. و می دانیم که یک متغیر یا یک تابع را می توان چند بار اعلام کرد، اما فقط یک بار می توان آن را تعریف کرد.



منبع: Difference between Definition and Declaration






آموزش cزبان c
شاید از این پست‌ها خوشتان بیاید