آرگومان های متغیر در زبان C – آموزش زبان C

۱۳۹۷-۰۸-۰۲
آرگومان های متغیر در زبان C در برنامه نویسی گاهی اوقات ممکن است نیاز باشد یک تابعی بنویسید که تعداد آرگومان های آن مشخص نباشد. در این زمان می توانیم از قابلیتی که زبان برنامه نویسی C در اختیار ما گذاشته است، استفاده کنیم. این قابلیت به شما اجازه می دهد تا توابعی بنویسید که تعداد آرگومان های آن مشخص نباشد. به ...

c variable arguments 4169 آرگومان های متغیر در زبان C   آموزش زبان C

آرگومان های متغیر در زبان C

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

به مثال زیر توجه کنید:

int func(int, ... ) {
   .
   .
   .
}
int main() {
   func(1, 2, 3);
   func(1, 2, 3, 4);
}

برای استفاده از این قابلیت باید فایل هدر stdarg.h را به برنامه خود اضافه کنید. در هنگام تعریف این گونه توابع، آرگومان اول همیشه باید یک int باشد. این آرگومان تعداد آرگومان هایی که به تابع ارسال می شوند را مشخص می کند.

در زیر مراجل مربوط به نحوه پردازش این آرگومان ها را مشاهده می کنید:

  • یک تابع تعریف کنید که آخرین آرگومان آن (…) باشد و همیشه قبل از (…) یک متغیر از نوع int تعریف کنید که نشان دهنده تعداد آرگومان ها است.
  • یک متغیر از نوع va_list در داخل تابع تعریف کنید. این نوع داده در فایل هدر h تعریف شده است.
  • از پارامتر int و ماکرو va_start برای مقدار دهی متغیر va_list استفاده کنید. ماکرو va_start در فایل هدر h تعریف شده است.
  • برای دسترسی به لیست آرگومان ها از ماکرو va_arg و متغیر va_list استفاده کنید.
  • از ماکرو va_end به منظور پاکسازی متغیر va_list از حافظه استفاده کنید.

اکنون با استفاده از مراحل فوق یک تابع ساده می نویسیم که می تواند تعدادی آرگومان بگیرید و سپس میانگین آن ها را بازگرداند:

#include <stdio.h>
#include <stdarg.h>

double average(int num,...) {

   va_list valist;
   double sum = 0.0;
   int i;

   /* initialize valist for num number of arguments */
   va_start(valist, num);

   /* access all the arguments assigned to valist */
   for (i = 0; i < num; i++) {
      sum += va_arg(valist, int);
   }
	
   /* clean memory reserved for valist */
   va_end(valist);

   return sum/num;
}

int main() {
   printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
   printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

امتحان کنید

زمانی که کد بالا توسط کامپایلر زبان C و اجرا شود، نتیجه زیر را تولید خواهد کرد:

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

توجه داشته باشید که در مثال فوق تابع average() دوبار فراخوانی شده است و هر دو بار اولین آرگومان نشان دهنده تعداد آرگومان های ارسال شده است.

نوشته آرگومان های متغیر در زبان C – آموزش زبان C اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.