PDA

View Full Version : چرا تابع main بازگشتی ندارد



bombcreator
سه شنبه 05 اردیبهشت 1391, 23:10 عصر
سلام
فکر کنم اسم تاپیک مشخص باشه
بارها گفته میشه که در c تابع main نمیتونه خودش رو فراخوانی کنه و درواقع بازگشتی ندارد
ممکنه یکی توضیح بده که چرا اینطوره؟
و یه سوال دیگه
ایا اسم main یه اسم رزرو شده است یعنی اگر من به جای اسم main یه نام دیگری رو انتخاب کنم بازهم کامپالر از همون تابع شروع به ترجمه برنامه میکنه؟

ممنون

بهروز عباسی
چهارشنبه 06 اردیبهشت 1391, 16:06 عصر
بارها گفته میشه که در c تابع main نمیتونه خودش رو فراخوانی کنه و درواقع بازگشتی ندارد
ممکنه یکی توضیح بده که چرا اینطوره؟
درود
تابع MAIN یک مقدار بازگشتی دارد که خاتمه برنامه را بهos گزارش میکند و کلاً برای این طراحی شده تا مقدار بازگشتی ان برای سیستم عامل مفهوم داشته باشد نه خود برنامه .


ایا اسم main یه اسم رزرو شده است یعنی اگر من به جای اسم main یه نام دیگری رو انتخاب کنم بازهم کامپالر از همون تابع شروع به ترجمه برنامه میکنه؟
بله رزرو شده است.

one hacker alone
چهارشنبه 06 اردیبهشت 1391, 18:13 عصر
جواب دوستمون صحيح هست ودر ادامه بايد بگم اون جايي كه مينويسيم int main در آخر مقدار 0 به معني پايان موفقيت آميز پايان 1 به معناي پايان ناقص و پايان EXIT_SUCCESS نيز ثابتي براي پايان موفقيت اميز هست
و وقتي مينويسين void main و return نميكنين سيستم عامل خودش برنامه رو همچون برنامه هاي ديگه در كنترل داره

اسم main كه در برخي از كامپايلر هاي تغيير نام به winmain و tmain و..... داده هم ثابت هست و ما اجازي تغيير دستي اون رو نداريم

bombcreator
چهارشنبه 06 اردیبهشت 1391, 18:56 عصر
نه دوستان منظور من از بازگشت همون recursion (توابع بازگشت پذیر ) بود

بهروز عباسی
چهارشنبه 06 اردیبهشت 1391, 19:20 عصر
نه دوستان منظور من از بازگشت همون recursion (توابع بازگشت پذیر ) بود
دوست عزیز من اینو فهمیدم و باز هم جوابم اونه
اینارو ببین تا با توابع بازگشتی بیشتر آشنا بشی
http://www.hpkclasses.ir/Courses/DataStructure/ds0900.html
http://fa.wikipedia.org/wiki/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_%D8%A8%D8%A7%D8%B2% DA%AF%D8%B4%D8%AA%DB%8C

one hacker alone
چهارشنبه 06 اردیبهشت 1391, 19:45 عصر
سلام معذرت من يه جور ديگه متوجه شدم
main بازگشتي نميشه اگه هم بشه منطقي نيست چرا؟ چون:
اول اينكه در توابع داخلي كه ما براي برنامه مينويسيم از كاربر ورودي رو دريافت ميكنيم بعد ميديم به تابع و اون تابع خروجي با ما ميده
حالا اگه من بخوام main رو بازگشتي كنم بايد كنترل ورودي رو داشته باشم كه كاربر صحيح وارد كنه و قراره براي من يه خروجي داشته باشه كه چجوري ميخواد به من خروجي رو نشون بده وقتي كارش تموم شده و بسته ميشه
و دليل اصلي هم اينه كه اين برنامه بدنه اصلي برنامه محسوب ميشه و در مديريت حافظه و استثنا ها نميشه خود main رو بازگشتي كرد براي همين شرايطي فراهم شده كه ما بتونيم خيلي راحت با تعريف يه تابع و ارسال پارامترها به اون پردازش رو انجام و خروجي رو چاپ كنيم
حالا شما فرض كن ميشه. چكار ميخواين بكنين كه حس ميكنين در حالت عادي نميشه؟