|
���
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.
|