در نتیجه، فراخوانی زمان اجرا به یک تابع متغیر به سبک C که آرگومان های نامناسب را ارسال می کند، رفتار تعریف نشده به دست می دهد. … چنین رفتار تعریف نشده ای می تواند برای اجرای کد دلخواه مورد سوء استفاده قرار گیرد.
تابع variadic در C چیست؟
توابع متغیر
توابع هستند که می توانند تعداد متغیری آرگومان را بگیرند. در برنامه نویسی C، یک تابع متغیر انعطاف پذیری را به برنامه اضافه می کند. یک آرگومان ثابت طول میکشد و سپس هر تعداد آرگومان میتواند ارسال شود.
آیا توابع Variadic بد هستند؟
دلایل عبارتند از: توابع متغیر الگو هم تعداد و هم انواع آرگومان های خود را می شناسند. آنها نوع ایمن هستند، انواع آرگومان های آنها را تغییر ندهید.
چگونه یک تابع variadic را در C++ اعلام می کنید؟
توابع متغیر توابعی هستند (مانند std::printf) که تعداد متغیری از آرگومان ها را می گیرند. برای اعلام یک تابع متغیر، بیضی بعد از لیست پارامترها ظاهر می شود، به عنوان مثال. int printf(const char format…);، که ممکن است قبل از آن یک کاما اختیاری باشد.
چگونه پارامترهای variadic را به تابع دیگری منتقل می کنید؟
شما نمی توانید آرگومان های variadic را به یک تابع variadic منتقل کنید. در عوض، باید تابعی را فراخوانی کنید که یک va_list را به عنوان آرگومان می گیرد. کتابخانه استاندارد انواع printf و scanf را ارائه می دهد که va_list را می گیرند. نام آنها دارای پیشوند v است.