PDA

View Full Version : تابع main



sajad2020
سه شنبه 21 آذر 1391, 17:02 عصر
سلام دوستان خسته نباشید من برنامه نویسهی سی و سی پلاس رو شروع کردم اما نمیدونم تابع mainاول برنامه چیه کتاب زیاد خوندم اما نمیدونم کارش چیه ؟وقتی کامپایلر به این تابع میرسه چه پیغامی به ویندوز میده ایا به ویندوز پیام میده یا نه به بار کننده؟اصلا اجرای یک برنامه چطوریه ؟اول کامپایلر هست یا بار کننده؟ممنون

#target
سه شنبه 21 آذر 1391, 22:11 عصر
تابع main نقطه شروع برنامه ای هست که تو نوشتی . اما کامپایلر قبل از رسیدن به اون کد ی سری کدها هم خودش داره . مثلا اماده سازی حافظه . گرفتن پارامتر ها و ... اینها رو قبل از اینکه تابع main رو فراخوانی کنه میذاره . و ی نقطه شروعی دیگه رو بعنوان آغاز به بار کننده سیستم عامل معرفی میکنه . شما که فایل اجرایی رو اجرا کنین سیستم عامل میره اون Entry Point رو اجرا میکنه که کدهایی هست که اول خود کامپایلر گذاشته . کامپایلر ته اون ی فراخوانی میذاره به تایع main که تو نوشتی
پس قبل تابع main شما ی سری چیزایی دیگه هم کامپایلر میذاره و نقطه شروع رو اونجا میذاره و . (بخوایم از دید اجرا سیستم عامل و اسمبلی ببینیم) ولی تو کدایی که تو نوشتی اول main هست.
نمیدونم خوب توضیح دادم یا نه

sajad2020
چهارشنبه 22 آذر 1391, 16:47 عصر
ممنون دوست عزیز از راهنمایی ارزشمندتان اما میشه نحوه اجرا یک برنامه سی پلاس یا سی رو توضیح دهید مراحل اجرا ان اگه میشه به زبان ساده و قابل فهم ممنون

mahak006
پنج شنبه 23 آذر 1391, 00:23 صبح
96560

فک کنم این عکس جوابگوی سؤال شما باشه .

sajad2020
شنبه 25 آذر 1391, 17:48 عصر
سلام دوست عزیز ممنون میشه راجع به این مسائل توضیح دهید:1-مترجم فایلهای objectرا تولید و بروی دیسک ذخیره میکند یعنی چی؟2-linkerفایل های objectرا با فایلهاتی object مربوطه ترکیب و فایل قابل اجرا رو تولید میکند یعنی چی؟3-لینکر چیه؟4-loaderچیه ؟ممنون میشم اگه کسی از دوستان این مفاهیم را برای من توضیح دهد.

mahak006
یک شنبه 26 آذر 1391, 22:41 عصر
سلام دوست عزیز ممنون میشه راجع به این مسائل توضیح دهید:1-مترجم فایلهای objectرا تولید و بروی دیسک ذخیره میکند یعنی چی؟2-linkerفایل های objectرا با فایلهاتی object مربوطه ترکیب و فایل قابل اجرا رو تولید میکند یعنی چی؟3-لینکر چیه؟4-loaderچیه ؟ممنون میشم اگه کسی از دوستان این مفاهیم را برای من توضیح دهد.

۱-اینا یه سری سلسله مراتبه . مثلا باید بدونید که برنامه قبل از اجرا در دیسک سخت ( حافظه جانبی ذخیره می شه ) -> مترجم فایل های object را بر روی دیسک ذخیره می کند .
منظور از object به زیاد ساده متغیر ها و اشاره گر ها و ساختمان هایی هستن که به صورت استاتیک تعریف شدن .

۲و۳-هر کتابخانه ای یه سری object داره . پس شما اگه اون کتابخونه رو تو برنامتون صدا بزنید اون object ها هم نیاز هست که تو دیسک ذخیره بشه .
لینکر در واقع کاری هست که وقتی یه کتابخانه رو فراخوانی می کنید کتابخانه رو به برنامتون لینک می کنه . به زبان ساده #include به سیستم میگه که لینکر باید کتابخونه ای که اسمشو اوردین به برنامه لینک کنه تا بشه از دستوراتش استفاده کرد .
۴-لودر هم اغلب به سیستم عامل برمی گرده ( اگه اشتباه نکنم ) که یه سری کار ها هست که سیستم عامل انجام می ده تا برنامه ی ذخیره شده روی دیسک سخت رو برای اجرا و تبدیل شدن به پروسس به رم انتقال می ده .

اگه دانشجوی نرم افزار باشین با پاس کردن دروس معماری کامپیوتر و سیستم عامل این مفاهیم رو می تونید یاد بگیرید و جزیی تر بهشون بپردازید ( مثلا در مورد متغیر های دینامیک هم بحث هایی هست که تو اینجا مربوط به مرحله آخر هستن .)