نمایش نتایج 1 تا 5 از 5

نام تاپیک: va_start

  1. #1
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197

    Tick va_start

    سلام .
    pArgList = (char *) &szFormat + sizeof (szFormat) ; 

    کسی می دونه تویه این یه خط کد دقیقا چه اتفاقی افتاده !
    یکم توضیع .

  2. #2
    این کدی هست که ماکرو va_start انجام می دهد ، یعنی دسترسی به آرگومان های تابع شما.

    از آنجایی که تعداد پارامترهای تابع نامشخص هست، لذا از طریق کد فوق به اولین آنها بعد از ... دسترسی پیدا خواهیم کرد، یعنی کد فوق آدرس رشته آخر (و مشخص) قبل از ... را می گیرد و به علاوه اندازه اش می کند تا به مکان اولین پارامتر بعد از آن دسترسی بیاید.

  3. #3
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197
    ممنون فکر کنم متوجه شدم .
    در واقع ادرس متغیری رو که ما در اینجا ... میدیم رو به ما بر میگردونه درسته ؟
    بعد اگه متغیر ها ثابت نباشن و نوع متغیر رو چه جوری ما می تونیم متوجه بشیم مثلا اولی int دومی char خوب اینا هر کدوم یه فضایه مشخصی رو اشغال می کنن ما چه جوری می تونیم نوع متغیر رو پیدا کنیم و پارامتر هایه بعدی چی اصلا این کار کاره ما است یا اینکه این اشاره گر فقط قابل استفاده در تابع های دیگه هست ؟

  4. #4
    شما باید خودتان در تابع یک قانونی وضع کنید تا ترتیب مشخص شود و معلوم شود در آرگومان چندم مثلا از نوع int هست، بعد به راحتی با استفاده از ماکرو va_arg می توانید با مشخص کردن نوع داده ای در آرگومان دومش معلوم کنید نوع داده ای شما چند بایت می باشد و خودش اشاره گری بر میگرداند از نوع داده ای مشخص شده خودمان.

    در مثال زیر از عدد ورودی پارامتر اول برای تشخیص نوع داده ای استفاده می کنیم :

    void YourFunction ( int i, ...)
    {
    va_list argptr;
    va_start(argptr, i);

    if ( i == 0 )
    {
    // i=0 --> int
    int n1 = va_arg( argptr, int );

    } else
    {
    // i=1 --> double
    double n2 = va_arg( argptr, double );

    } esle
    {
    char *n3 = va_arg( argptr, char*);
    // i>1 --> char
    }
    }

    int main()
    {
    YourFunction ( 0, 125 );
    YourFunction ( 1, 125.674 );
    YourFunction ( 6, 'A' );
    // Do something
    return 0;
    }

  5. #5
    کاربر دائمی آواتار meysam_meysam74
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    رشت
    پست
    197
    درسته ممنون متوجه شدم

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •