Unix Man (Ñïðàâî÷íîå ðóêîâîäñòâî)

         

VARARGS(3)


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 ) è ê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.



Ñîäåðæàíèå ðàçäåëà