PDA

View Full Version : تغیر درکامپایلر سی++



amir_civil
شنبه 30 آبان 1388, 16:12 عصر
با سلام
در سی++2008 میشه کاری کرد که کامپایلر چیزی به برنامه اضافه نکنه و فقط همون کدی رو که ما نوشتیم کامپایل کنه؟(منظورم توابع مربوط به دیباگ هست که اضافه میشه)

amir_civil
شنبه 30 آبان 1388, 22:10 عصر
میتوانید آن را به جای debug به صورت release کامپایل کنید.
باز فرقی در کدهای دیباگ نمیکنه اگه dis asm کنید معلومه
چیزی تو مایه برنامه های اسمبلی که چیزه اضافی نداره میخام

pswin.pooya
یک شنبه 01 آذر 1388, 01:57 صبح
با سلام
در سی++2008 میشه کاری کرد که کامپایلر چیزی به برنامه اضافه نکنه و فقط همون کدی رو که ما نوشتیم کامپایل کنه؟(منظورم توابع مربوط به دیباگ هست که اضافه میشه)


معمولا چیزی که اضافه میشه CRT (C RunTime( هستش. این برای خود کامپایلر هستش و یکسری از توابع موارد مثل اون هستن که برنامه اضافه میشه. اگر این گزینه رو توی تنظیمات پروژه false کنید اون موقع دیگه کنار پروژه قرار داده نمشن و حجم پروژه به چند برابر کمتر از حالت عادی کاهش پیدا میکنه. اما در عوض دیگه نه کامپایلر میدونه که تابع main برای ورود به برنامه هست و نه کلمات کلیدی مثل new و delete وجود داره و همه این موارد رو باید خودتون بنویسید. من تقریبا این کار رو کردم . میتونین سورس سیستم عامل من رو ببینید. تمام چند هزار خط کد سیستم عامل من همش توی 11 کیلو بایت جا شده؟!!!!:بامزه:

amir_civil
دوشنبه 02 آذر 1388, 16:12 عصر
کامپایلر میدونه که تابع main برای ورود به برنامه هست
مشکل این قسمت رو چه جوری حل کردین؟

pswin.pooya
دوشنبه 02 آذر 1388, 20:47 عصر
مشکل این قسمت رو چه جوری حل کردین؟

شما یه روتین می نویسین که کاراهای لازمه رو برای شروع برنامه انجام بده.( مثل ارسال پارامترها به تابع main و غیره) و البته یه prtotype به هر نامی و شکلی که خواستین از تابع main میسازین. مثلا داخل سیستم عامل من، اسم تابع main رو kmain گذاشتم و اون رو توی اون روتین فراخوانیش کردم. چون این تابع رو به صورت prototype تعریفش کردین یگه لازم نیست کدی وجود داشته باشه و تنها کد در تابع main هنگام کامپایل کل برنامه لازم هستش. برای اینکه بیشتر متوجه منظورم بشین فایل entry.cpp از پروژه سیستم عامل آراکس رو نگاه بکنید:

http://sourceforge.net/projects/arax/