آژانس هواپیماییexchanging

تابع با پارامترهای اختیاری

شروع موضوع توسط pirmard ‏12 ژانویه 2008 در انجمن خانواده C++ , C

  1. pirmard

    pirmard Registered User

    تاریخ عضویت:
    ‏21 آگوست 2007
    نوشته ها:
    837
    تشکر شده:
    3
    سلام
    اقا 1 روزه ما علافه 2 خط کد از یه برنامه شدیم !
    جریان اینه که یه تابع داره این برنامه که پارامتر اختیاری می گیره . بعد حالا کامپایلر گیر داده به دیفاین تابع !
    از طرف دیگه از این پارامترهای اختیاری هم نمیشه استفاده کرد .

    ببینین ته تابع 3 تا نقطه گذاشته شده که یعنی بعدش بتونه پارامتر اختیاری بیاد . حالا اینجوری ایراد می گیره :
    f
    یعنی کامپایلر به خط 54 که میرسه به 3 نقطه و پرانتز گیر داده که یعنی نمی فهمه اونا چین :wacko:

    حالا باز توی همین تابع خط بعدی اومده از __va_arg__ استفاده کنه . به اون هم گیر میده !!!!

    خط بالا که ایراد نداره . اما کامپایلر میگه :

    علت چیه ؟
    با وجود اینکه کتابونه ی stdarg هم ادد شده اول برنامه .

    کسی از اساتید می دونه چشه این ؟

    compiler : visual c++ 6.0
     
  2. Arash_j13

    Arash_j13 Registered User

    تاریخ عضویت:
    ‏18 فوریه 2005
    نوشته ها:
    778
    تشکر شده:
    2
    محل سکونت:
    مشهد
    دوست عزیز define تابع تعریف نمی کنه بلکه یه ماکرو می سازه ماکروها اصلا قدرت تابع ها رو ندارن پس نمی تونن مثل اونا پارمتر های اختیاری یا پارامتر متغییر داشته باشن بهتره یه تابع دریت تعریف کنید در مورد پارامتر های اختیاری هم تاجایی که ممکنه از ... استفاده نکنید و از مقدار های اپشنال به جاش استفاده کنید چون با استفاده از ... نیاز به مدیریت بالای داره که در صورت عدم رعایتش نظم استک رو بهم می ریزید مشکلات عجیب قریبی براتون پیش می یاد و دوم اینکه ... همه کنترل تایپ ها رو دور می ریزه و کاربر می تونه به جای اینت دابل بفرسته و ...
     
  3. pirmard

    pirmard Registered User

    تاریخ عضویت:
    ‏21 آگوست 2007
    نوشته ها:
    837
    تشکر شده:
    3
    ممنون عزیز

    اما خوب این ماکرو تعریف شده و توی برنامه ی پدرمادر داری استفاده شده . خودم ننوشتم و اطمینان دارم چندین هزار نفر این سورس رو استفاده کردن و باگ ریپورت نکرده بودن این مورد رو .
    الان دستم باز نیست که نحوه ی ارسال پارامتر رو تغییر بدم وگرنه 1000 جای دیگه که فراخونی داریم باید برم تغییر بدم :( که کار درستی نیست .
    الان این چیزی که بالا نوشتم پس به نظر شما مشکل داره واقعا ؟