.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 1990, 1991 The Regents of the University of California. .\" All rights reserved. .\" .\" This code is derived from software contributed to Berkeley by .\" the American National Standards Committee X3, on Information .\" Processing Systems. .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\" @(#)stdarg.3 6.8 (Berkeley) 6/29/91 .\" .\" Converted for Linux, Mon Nov 29 15:11:11 1993, faith@cs.unc.edu .\" Additions, 2001-10-14, aeb .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH stdarg 3 "2 mai 2024" "Pagini de manual de Linux 6.8" .SH NUME stdarg, va_start, va_arg, va_end, va_copy \- liste de argumente variabile .SH BIBLIOTECA Biblioteca C standard (\fIlibc\fP, \fI\-lc\fP) .SH SINOPSIS .nf \fB#include \fP .P \fBvoid va_start(va_list \fP\fIap\fP\fB, \fP\fIlast\fP\fB);\fP \fItype\fP\fB va_arg(va_list \fP\fIap\fP\fB, \fP\fItype\fP\fB);\fP \fBvoid va_end(va_list \fP\fIap\fP\fB);\fP \fBvoid va_copy(va_list \fP\fIdest\fP\fB, va_list \fP\fIsrc\fP\fB);\fP .fi .SH DESCRIERE O funcție poate fi apelată cu un număr variabil de argumente de diferite tipuri. Fișierul de includere \fI\fP declară un tip \fIva_list\fP și definește trei macro pentru parcurgerea unei liste de argumente al căror număr și tipuri nu sunt cunoscute de funcția apelată. .P Funcția apelată trebuie să declare un obiect de tip \fIva_list\fP care este utilizat de macrocomenzile \fBva_start\fP(), \fBva_arg\fP() și \fBva_end\fP(). .SS va_start() Macrocomanda \fBva_start\fP() inițializează \fIap\fP pentru utilizarea ulterioară de către \fBva_arg\fP() și \fBva_end\fP() și trebuie să fie apelată prima. .P Argumentul \fIlast\fP este numele ultimului argument înainte de lista de argumente a variabilei, adică ultimul argument al cărui tip este cunoscut de către funcția apelantă. .P Deoarece adresa acestui argument poate fi utilizată în macrocomanda \fBva_start\fP(), acesta nu trebuie să fie declarat ca o variabilă de registru sau ca o funcție sau un tip de matrice. .SS va_arg() Macrocomanda \fBva_arg\fP() se extinde la o expresie care are tipul și valoarea următorului argument din apel. Argumentul \fIap\fP este \fIva_list\fP \fIap\fP inițializat de \fBva_start\fP(). Fiecare apel la \fBva_arg\fP() modifică \fIap\fP astfel încât următorul apel returnează următorul argument. Argumentul \fItype\fP este un nume de tip specificat astfel încât tipul unui indicator la un obiect care are tipul specificat să poată fi obținut prin simpla adăugare a unui * la \fItype\fP. .P Prima utilizare a macrocomenzii \fBva_arg\fP() după cea a macrocomenzii \fBva_start\fP() returnează argumentul după \fIlast\fP. Invocările succesive returnează valorile celorlalte argumente. .P În cazul în care nu există un argument următor sau dacă \fItip\fP nu este compatibil cu tipul argumentului următor real (promovat în conformitate cu promoțiile de argumente implicite), vor apărea erori aleatorii. .P Dacă \fIap\fP este pasat unei funcții care utilizează \fBva_arg(\fP\fIap\fP\fB,\fP\fItip\fP\fB),\fP atunci valoarea lui \fIap\fP este nedefinită după returnarea acelei funcții. .SS va_end() Fiecare invocare a \fBva_start\fP() trebuie să fie însoțită de o invocare corespunzătoare a \fBva_end\fP() în cadrul aceleiași funcții. După apelul \fBva_end(\fP\fIap\fP\fB)\fP, variabila \fIap\fP este nedefinită. Sunt posibile mai multe parcurgeri ale listei, fiecare dintre ele între paranteze de \fBva_start\fP() și \fBva_end\fP(). \fBva_end\fP() poate fi o macrocomandă sau o funcție. .SS va_copy() Macrocomanda \fBva_copy\fP() copiază lista de argumente variabile (inițializată anterior) \fIsrc\fP în \fIdest\fP. Comportamentul este ca și cum \fBva_start\fP() ar fi aplicat la \fIdest\fP cu același argument \fIlast\fP, urmat de același număr de invocări \fBva_arg\fP() care a fost utilizat pentru a ajunge la starea actuală a \fIsrc\fP. .P .\" Proposal from clive@demon.net, 1997-02-28 O implementare evidentă ar fi ca \fIva_list\fP să fie un indicator la cadrul de stivă al funcției cu număr de argumente variabile. Într\-o astfel de configurație (de departe cea mai comună) nu pare să existe nimic împotriva unei atribuiri .P .in +4n .EX va_list aq = ap; .EE .in .P Din nefericire, există și sisteme care o transformă într\-o matrice de indicatori (de lungime 1), iar acolo este nevoie de .P .in +4n .EX va_list aq; *aq = *ap; .EE .in .P În cele din urmă, pe sistemele în care argumentele sunt transmise în registre, poate fi necesar ca \fBva_start\fP() să aloce memorie, să stocheze acolo argumentele, precum și o indicație a argumentului care urmează, astfel încât \fBva_arg\fP() să poată parcurge lista. Acum, \fBva_end\fP() poate elibera din nou memoria alocată. Pentru a se adapta la această situație, C99 adaugă o macrocomandă \fBva_copy\fP(), astfel încât atribuirea de mai sus poate fi înlocuită cu .P .in +4n .EX va_list aq; va_copy(aq, ap); \&... va_end(aq); .EE .in .P Fiecare invocare a \fBva_copy\fP() trebuie să fie însoțită de o invocare corespunzătoare a \fBva_end\fP() în cadrul aceleiași funcții. Unele sisteme care nu furnizează \fBva_copy\fP() au în schimb \fB__va_copy\fP, deoarece acesta a fost numele utilizat în proiectul de propunere. .SH ATRIBUTE Pentru o explicație a termenilor folosiți în această secțiune, a se vedea \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Interfață Atribut Valoare T{ .na .nh \fBva_start\fP(), \fBva_end\fP(), \fBva_copy\fP() T} Siguranța firelor MT\-Safe T{ .na .nh \fBva_arg\fP() T} Siguranța firelor MT\-Safe race:ap .TE .SH STANDARDE C11, POSIX.1\-2008. .SH ISTORIC .TP \fBva_start\fP() .TQ \fBva_arg\fP() .TQ \fBva_end\fP() C89, POSIX.1\-2001. .TP \fBva_copy\fP() C99, POSIX.1\-2001. .SH AVERTISMENTE Spre deosebire de macrocomenzile istorice \fBvarargs\fP, macrocomenzile \fBstdarg\fP nu permit programatorilor să codifice o funcție fără argumente fixe. Această problemă generează muncă mai ales la convertirea codului \fBvarargs\fP în cod \fBstdarg\fP, dar creează dificultăți și pentru funcțiile cu număr de argumente variabile, „variadice”, care doresc să transmită toate argumentele lor unei funcții care ia un argument \fIva_list\fP, cum ar fi \fBvfprintf\fP(3). .SH EXEMPLE Funcția \fIfoo\fP preia un șir de caractere de format și afișează argumentul asociat fiecărui caracter de format în funcție de tip. .P .EX #include #include \& void foo(char *fmt, ...) /* \[aq]...\[aq] este sintaxa C pentru o funcție variadică */ \& { va_list ap; int d; char c; char *s; \& va_start(ap, fmt); while (*fmt) switch (*fmt++) { case \[aq]s\[aq]: /* șir */ s = va_arg(ap, char *); printf("șir %s\en", s); break; case \[aq]d\[aq]: /* număr întreg */ d = va_arg(ap, int); printf("număr întreg %d\en", d); break; case \[aq]c\[aq]: /* caracter */ /* avem nevoie de o conversie de tip aici, deoarece va_arg acceptă numai tipuri complet promovate */ c = (char) va_arg(ap, int); printf("caracter %c\en", c); break; } va_end(ap); } .EE .SH "CONSULTAȚI ȘI" \fBvprintf\fP(3), \fBvscanf\fP(3), \fBvsyslog\fP(3) .PP .SH TRADUCERE Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu . .PP Această traducere este documentație gratuită; citiți .UR https://www.gnu.org/licenses/gpl-3.0.html Licența publică generală GNU Versiunea 3 .UE sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE. .PP Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la .MT translation-team-ro@lists.sourceforge.net .ME .