ÈÌß
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 ) è ê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