параметри опрацьовані, перед виходом із функції викликають макрос va_end (ap); для обнулення змінної ap та інших змінних макросів.
Розглянемо приклад організації доступу до списку неявних параметрів певної функції void f(char *s,…) за допомогою спеціального форматного символьного рядка s, елементи якого відповідають першим латинським літерам у назві типу кожного з неявних параметрів. Аналогічно працю- ють і деякі стандартні функції – наприклад printf () та scanf().
Нехай типами неявних параметрів функції f є _Bool, сhar,double та long. Якщо список фактичних неявних параметрів у виклику f склада- ється, наприклад, з п'яти елементів та їхні типи – сhar, double, _Bool, long та long, то такому списку відповідає форматний рядок "cdBll":
#include <stdarg.h> void f(const char *s,…)
{_Bool bx; char cx; double dx; long lx;
va_list ap; /*покажчик на поточний неявний параметр*/ char *ss=s; /*покажчик для визначення типа параметра*/ va_start (ap,s); /*ініціалізація ap*/
while(*ss){
switch (*ss++){ /*обробка поточного параметра*/ case 'B':bx= va_arg(ap, _Bool);…;break; case 'c':cx= va_arg(ap, сhar);… ;break; case 'd':dx= va_arg(ap, double);… ;break;
case '1':lx= va_arg(ap, long);… ;break;
}
}
va_end (ap);
}
int main()
{double d1=1/3,d2=2e-3; char c1='a';
f("ddc" ,d1,d2,c1); /*обробка трьох параметрів*/ f("lcdcd",0L,'0',d2,c1,5.0); /*обробка п'ятьох параметрів*/ return 0;
}
3.6.8. ВБУДОВАНІ ФУНКЦІЇ
Вбудовані функції вперше з'явилися в С99. Ознакою їх є службове сло- во inline у заголовку функції. Саме це слово походить від оптимізаційно- го методу внутрішньорядкового кодування (англ. – inline expansion), що застосовується на етапі генерації коду, коли виклик функції замінюється