Server for Information Technologies ������ ��������������
������� �������������� ����������
(095) 932-9212, 932-9213, 939-0783
E-mail: [email protected]
������ �������� ����(!) ������������� ���������� CIT Forum CD-ROM

VARARGS(3)
XENIX System V (21 ���� 1987)

���
varargs - y�pa���e� c��c�o� �epe�e��o� �����

���������

	#include <varargs.h>
	
	function(va_alist)
	va_dcl
	va_list pvar;
	va_start(pvar);
	f=va_arg(pvar,type);
	va_end(pvar);

��������
��� �a�poc� �o��o���� ��ca�� �o������e �po�pa���, pa�o�a���e co c��c�a�� ap�y�e��o� �epe�e��o� �����. �y�����, �o�op�� �o�y� �epe�a�a��c� c��c�� ap�y�e��o� pa�����o� ����� (�a�p��ep printf(3)) � �o�op�e �e �c�o���y�� varargs, c�a�o���c� �e�epe�oc�����, �oc�o���y c�oco� �epe�a�� ap�y�e��o� �a����o-�a��c��.

Va_alist �c�o���ye�c� � �a�ec��e �apa�e�pa �y����� c �epe�e���� ��c�o� ap�y�e��o� � o�o��a�ae� c��co� ap�y�e��o�.

Va_dcl ����e�c� o��ca�e�e� ��� va_alist. �oc�e �e�o �e �y��o c�a���� �o��y c �a���o�.

Va_list ��o ��� �epe�e���x, �c�o���ye��x ��� �epe�e��o� pvar, �o�opa� �c�o���ye�c� ��� pa�o�� co c��c�o�. �o���a ���� o��ca�a �o �e���e� �epe o��a �a�a� �epe�e��a�.

Va_start(pvar) �����ae�c� ��� �����a���a��� pvar �a �a�a�o c��c�a.

Va_arg (pvar,type) �o��pa�ae� c�e�y���� ap�y�e�� �� c��c�a, �a �o�op�� y�a���ae� pvar. Type ����e�c� ���o� o���ae�o�o ap�y�e��a. B c��c�e �o�y� ���� c�e�a�� ap�y�e��� pa���x ���o�, �o �y����� �o���a ��a�� ��� o�epe��o�o ap�y�e��a, �a� �a� ��o �e���� o�pe�e���� �o �pe�� ���o��e��� �po�pa���.

Va_end(pvar) �����ae�c� ��� �a�ep�e��� pa�o�� co c��c�o�.

B �po�pa��e �o�e� ���� �ec�o���o y�ac��o� pa�o�� c �epe�e���� c��c�o� ap�y�e��o�, �a����e���x � �ap� va_start ... va_end.

�P��EP

	#include <stdio.h>
	#include <varargs.h>
	
	main()
	{
	   show(2,3.1,"buf",4.1,"end");
	   show(1,5.9,"hello");
	   show(4,6.2,"oops",5.3,"blah",5.1,"lovely",
	     2.3,"madrigal");
	}
	
	/* �ep��� ap�y�e�� ��ee� ��� "�e�oe" � y�a���ae�
	* �a �o���ec��o �ap ap�y�e��o�, �o�op�e �oc�e�y��
	*  �a ���. ����� �apa�� ������c� �epe�e���e
	* c ��a�a��e� �o��o� � y�a�a�e�� �a c�po��.
	*
	* �a�o����e, ��o �p� �epe�a�e �epe�e���x c
	* ��a�a��e� �o��o� o�� �peo�pa�y��c� � ���
	* double, a �epe�e���e ���a char - � ��� int.
	*/
	show(n,va_alist)
	int n;
	va_dcl
	{
	     va_list ap;
	     int i;
	     double f;
	     char *p;
	
	     va_start(ap);
	     for(i=0; i<n; i++) {
	          f = va_arg(ap,double);
	          p = va_arg(ap,char *);
	          printf("%4.1f %s\n",f,p);
	     }
	     va_end(ap);
	}

�A�E�A���
B����a��a� �y����� ca�a �o���a o�pe�e���� �o���ec��o ap�y�e��o�, �a� �a� �����ae�a� �y����� �e �o�e� o�pe�e���� ��c�o �epe�a���x e� ap�y�e��o� �o c�e�y. Ha�p��ep, �y����� excel �epe�ae�c� �y�e�o� y�a�a�e�� � �a�ec��e �p���a�a �o��a c��c�a ap�y�e��o�. Printf o�pe�e��e� ��c�o ap�y�e��o�, a�a����py� �op�a��y� c�po�y.
Comments: [email protected]
Designed by Andrey Novikov
Copyright © CIT