">
ÈÌß
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.