با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند. در ادامه به شرح آرگومان های متغیر در زبان C و نحوه پردازش آرگومانها پرداخته. همچنین با ماکروهایی مانند ماکرو va_start در C و ماکرو va_arg آشنا می شویم.
1 2 3 4 5 6 7 8 9 10 | int func(int, ... ) { . . . } int main() { func(1, 2, 3); func(1, 2, 3, 4); } |
در زیر مراجل مربوط به نحوه پردازش این آرگومان ها را مشاهده می کنید:
با استفاده از مراحل فوق یک تابع ساده می نویسیم که می تواند تعدادی آرگومان بگیرید. سپس میانگین آن ها را بازگرداند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #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)); } |
وقتی کد بالا کامپایل و اجرا می شود، نتیجه زیر را تولید می کند.
لازم به ذکر است که تابع average () دو بار فراخوانی شده است.
در هر دو بار اولین آرگومان نشان دهنده تعداد آرگومان های ارسال شده است. برای انتقال تعداد آرگومانهای متغیر از سه نقطه استفاده می شود.
1 2 | Average of 2, 3, 4, 5 = 3.500000 Average of 5, 10, 15 = 10.000000 |
در این جلسه توضیحاتی در مورد آرگومان های متغیر در زبان C داشتیم.
با ماکرو va_start در C و ماکرو va_arg آشنا شدیم.
و مدیریت حافظه در زبان C رو جلسه بعد آغاز خواهیم نمود.