|
éíñ
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.
|