Ãëàâíàÿ > Îïåðàöèîííûå ñèñòåìû > UNIX
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.
Ãëàâíàÿ > Îïåðàöèîííûå ñèñòåìû > UNIX
|