MGroup

int main() در مقابل void main() تفاوت در چیست!؟

Posted on: ژانویه 12, 2009

راستش حقیقتی که وجود داره اینه که خیلی از ما (منظورم برنامه‌نویسهاس😉 ) با اینکه ممکنه سالها تجربه و سابقه  داشته باشیم! اما موضوعات حیاتی‌ای هستند، که در موردشون خبر نداریم! یا کارهایی هستند، و تفاوتهایی که بدون اطلاع از نحوه‌ی درست ماجرا! انجام می‌دیم!

البته اینا توی زبانهای C و ++C که دست برنامه‌نویس باز تره! بیشتر دیده می‌شه!

و حتی یه موضوع جالب‌تر! خیلی‌ها هستند، که با کلی سابقه و ادعا توی برنامه‌نویسی C یا ++C هنوز نمی‌دونن این دو تا زبون چه فرقی دارن!؟ اصلا فرقی دارن!؟ و نهایتا می‌دونن که آره! فرقشون اینه که ++C یه زبان شی‌گراست و یه مفهومی بنام Class اضافه بر C داره! برا همینه که فقط دو تا + اضافه کردن بهش!😀

یکیشون یکی از اساتید دانشگاه فردوسی مشهده! درس مبانی گفته می‌خواد بهشون C درس بده! اما وقتی من کدهای خود استادش رو دیدم، گفتم بابا اینا که ++C ِ:-/

بگذریم… از این چیزا مخصوصا توی دانشگاه‌ها زیاد پیدا می‌شه!:-/

امروز با این مطلب مواجه شدم، که به موضوع مهم و جالبی اشاره کرده بود! (که وبلاگ جالبیه! اگه برنامه‌نویس هستین! دنبالش کنین😉 )

گفتم بد نیست این مطلب رو به فارسی هم داشته باشیم😉

موضوع اینه:

توی C و ++C تابع اصلی برنامه main هست! که اجرای برنامه از اون شروع می‌شه! حالا این main رو می‌شه به دو روش تعریف کرد:

int main()

و

void main()

حالا یه حالت دیگه هم هست، که بعضیا اصلا بدون خروجی تعریف می‌کنن! و می‌گن خود کامپایلر براش بصورت پیش‌فرض int می‌گیره!😉

حالا اینکه ورودی هم داره رو کاری نداریم! فعلا بحث سر خروجیه تابعه!😉

سوال اینه که کدوم حالت بهتره!؟ اصلا آیا تفاوتی هست!؟ چرا!؟

جواب سوال دوم بله هست! (اگه نبود که بیکار نبودیم در موردش بنویسیم) ، به قول یارو گفتنی، یک دنیا تفاوت وجود داره!

  • می‌تونه هیچ اتفاقی نیوفته!
  • می‌تونه یه Warning زمان کامپایل ایجاد کنه!
  • باعث Crash کردن برنامه بشه!
  • و یا اینکه باعث ایجا اشکال در فراخوانی محیطی بشه!

پس کدومش درسته!؟

توی ++C حالت اول! یعنی با خروجی int (و طبق استاندارد( ISO/IEC 14882:1998 ) یک برنامه‌ی ++C  باید خروجی int داشته باشه!)

ولی توی C چی!؟

در واقع توی C می‌گن این بستگی به پیاده‌سازی داره! (پیاده‌سازیه چی!؟ زبان دیگه بابا! کامپایلر!)

ولی توی C هم توصیه شده که از همون خروجی int استفاده بشه! هرچند، هیچ اجباری نیست.

حالا بیایم یه نگاه بهتر به ماجرا بندازیم! شاید افرادی باشن که بگن «کامپایلر من که هیچ warningی نمی‌ده! پس چرا باید نگران باشم!؟» (به قول این بابا، اگه کامپایلر شما اینطوریه! و Warning نمی‌ده! پس بهتره عوضش کنین! احتمالا هم کامپایلرتون مایکروسافتیه! :)) )

یه چیزی وجود داره به نام «Start up code» که در واقع زمانی که یک برنامه فراخوانی می‌شه اول این اجرا می‌شه، و کارهای اولیه(stack و heap و اینا رو آماده می‌کنه) رو انجام می‌ده! و بعد میاد و main رو فراخوانی می‌کنه!

حالا این جناب Start up از main انتظار داره که یک int خروجی بده،‌ و بذاره توی stack !

حالا اگه ما حال نکنیم که چیزی خروجی بدیم! (حالتی که با void main پیش‌میاد!) اینجا یه مشکلاتی پیش‌میاد که ما هم دسترسی بهش نداریم که ماست‌مالیش کنیم. حالا مثلا یه حالت اینه که این بابا انتظار داره که این مقدار بازگشتی توی یک بازه‌ی خاص باشه! و اگه توی اون بازه نبود! Crash می‌کنه! و یا این حالت پیش میاد که این جناب Startup میاد از توی stack خروجیه برنامه رو برداره! در حالیکه چی!؟ برنامه هیچی اونجا نذاشته!:-/ (تا حالا دیدن برنامه‌ای توی خروجش Segmentation Fault بده!؟)

و حرف آخر: بعضیا می‌گن ما می‌سپریم به خودش! یعنی خروجی رو تعیین نمی‌کنیم! main(){} خالی می‌ذاریم! خودش(کامپایلر) براش int در نظر می‌گیره! اینم درست نیست! چون همچین چیزی توی استاندارد نیست! و حالا کامپایلر شما بهتون حال داده و اینکار رو کرده، دلیل نمی‌شه همه اینکار رو بکنن!😛

—————————————–

پ.ن: اگر بعضی اصطلاحات برای شما نا آشنا هستند، احتمالا دلیلش اینه که هدف این پست شما نیستی! پس زیاد مهم نیست😉

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

پ.ن: اگر یه ذره توش چرت و پرت هم گفتم، دیگه کاریش نمی‌شه کرد، زندگی سخته😉

پ.ن: جدیدا این صفحه رو توی وبلاگ ایجاد کرده‌ایم! توش به مقالات و مطالب که وابسته به زمان و مکان نیستن، لینک دادیم😉

7 پاسخ to "int main() در مقابل void main() تفاوت در چیست!؟"

سلام مهداد جان
دستت درد نکنه. جالب بود.

راستی ببخشیدا وقت نکردم PyGlossary رو توی لانچپد بذارم. ایشالا امتحانام که تموم شد. دعا کن امتحانام رو خوب بدم(فقط میخوام پاس کنم). اوضاع درسی‌م خیلی درامه!!!

نمی‌دونم چرا نمی‌تونم توی وبلاگم لوگین کنم. فقط با یه سایت پ‌روک‌س‌ی تونستم(که اونم خیلی کند هست)(پس احتمالاً مشکل از ف‌ی‌ل‌ت‌ر‌ینگ هست). تو هم همین مشکل رو داری؟ چیکار می‌کنی؟

————————
مهرداد:
ممنون سعید جان،
ما هم دعا! می‌کنیم که پاس شی😀
آره، برای لاگین به سایتها اکثرا مشکل هست! برای WP من از صفحه‌ی مخصوص موبایلش استفاده می‌کنم! m.wordpress.com

تا قبل از اينكه با لينوكس كد ++C بنويسم اين مطلب رو نمي‌دونستم ولي بعد ديدم اونجا اصلا اجازه نميده Main رو void بنويسي و فهميدم كه gcc از استاندارد پيروري مي‌كنه
ممنون

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

—————————
مهرداد:
ها!؟:-/
خدایی سخته آخه، دوست ندارم توی وبلاگ مطلبی رو کتابی بنویسم انگار دارم توی یه سایت خبر می‌نویسم، خبر هم که می‌نویسم باید یه چندتا تیکه بندازم وسطش که از اون شکل در بیاد😀
خوب دیگه توی دنیا یه چیزایی هیچ‌وقت عوض نمی‌شن
و بعضی چیزا هم می‌شن😀

حالا سعی می‌کنم کمترش کنم😉

you are an idiot….

————–
Oh! maybe

واقعآ وب جالبی داری این و از ته قلب میگم
امیدوارم تا ابد ادامه بدی
و اینو بدون که کسی هست که هر روز (از امروز به بعد) منتظر پست های جددید هست

نظر من متفاوته
«»»»
طفا توی پستت انقدر از حواشی و کنایه و ضرب المثل استفاده نکن. آدم خستش میشه. متن رو الکی پیچش میدی
«»»»
این سبک نوشتن مقاله رو جذاب تر میکنه

lمیشه بیشتر توضیح بدین.ممنون

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

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s


توجه: برای رفع مشکلات لینوکسی خود به یکی از انجمنهای اینترنتی مراجعه کنید! اینجا به هیچ وجه برای رفع مشکلات لینوکسی شما مناسب نیست!
تبادل لینک نداریم! لطفا سوال نفرمایید ما به هرکس بخوایم لینک می‌دیم، هرکس هم خواست به اینجا لینک بده! :)

Kategories

بایگانی

وضعیت بلاگ

  • 110,033 بازدید

مجوز انتشار:

تمامی مطالب و مقالات این بلاگ تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد.
%d وب‌نوشت‌نویس این را دوست دارند: