Server for Information Technologies óÅÒ×ÅÒ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ
ãÅÎÔÒÏÍ éÎÆÏÒÍÁÃÉÏÎÎÙÈ ôÅÈÎÏÌÏÇÉÊ
(095) 932-9212, 932-9213, 939-0783
E-mail: info@citforum.ru
óÅÒ×ÅÒ ÓÏÄÅÒÖÉÔ ÍÏÒÅ(!) ÁÎÁÌÉÔÉÞÅÓËÏÊ ÉÎÆÏÒÍÁÃÉÉ 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: info@citmgu.ru
Designed by Andrey Novikov
Copyright © CIT