دوال ذات معطيات متغيرة العدد
من cppreference.com
< c
الدوال ذات معطيات متغيرة العدد (بالإنجليزية: variadic arguments أو varargs) هي دوال مثل printf يمكن ان تستقبل وتتعامل مع عدد متغير من المعطيات.
الإعلان عن دالة ذات معطيات متغيرة يتم عن طريق استعمال ثلاث نقاط كمعطى آخير (مثلا int printf(const char* format, ...);). أنظر Variadic arguments للمزيد من المعلومات عن كيفية الإستعمال والتحويلات التلقائية التي تحدث للمعطيات.
يمكن استعمال هذه الخاصية من داخل أي دالة معلن عنها كذلك باستخدام الدوال التالية:
معرفة في ملف
<stdarg.h> | ||
ماكرو | ||
تمكن من ابتداء التعامل مع معطيات دالة variadic (ماكرو دالة) | ||
تأتي بالمعطى التالي لدالة variadic (ماكرو دالة) | ||
(C99) |
تأتي بنسخة من معطيات دالة variadic (ماكرو دالة) | |
تنهي التعامل مع معطيات دالة variadic (ماكرو دالة) | ||
أنواع | ||
تحمل المعلومات اللازمة لعمل va_start و va_arg و va_end و va_copy (معرف بـ typedef) |
[تعديل] مثال
تطبع قيم ذات أنواع مختلفة.
قم بتشغيل هذا الكود:
#include <stdio.h> #include <stdarg.h> void simple_printf(const char* fmt,...) { va_list args; va_start(args, fmt); while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); printf("%d\n", i); } else if (*fmt == 'c') { // note automatic conversion to integral type int c = va_arg(args, int); printf("%c\n", c); } else if (*fmt == 'f') { double d = va_arg(args, double); printf("%f\n", d); } ++fmt; } va_end(args); } int main(void) { simple_printf("dcff", 3, 'a', 1.999, 42.5); }
الخرج:
3 a 1.999000 42.50000
[تعديل] أنظر أيضا
مقالة مرجع C++ عن Variadic functions
|