C/stdarg.h: Diferenzas entre revisións

Contido eliminado Contido engadido
Gallaecio (conversa | contribucións)
Completo.
 
m Bot: Cambios estética
 
Liña 10:
</source>
 
== Declaración e definición de funcións con argumentos indefinidos ==
As funcións que poden recibir un número variable e indefinido de argumentos defínense con puntos suspensivos como último parámetro. Un exemplo de declaración podería ser o seguinte:
<source lang=c>
Liña 28:
</source>
 
== Tipos ==
<table border=1 cellspacing=0 cellpadding=5>
<tr style="text-align: center;">
Liña 40:
</table>
 
== Claves ==
<table border=1 cellspacing=0 cellpadding=5>
<tr style="text-align: center;">
Liña 64:
</table>
 
== Acceder aos argumentos indefinidos ==
Para acceder aos argumentos indefinidos, hai que declarar unha variable do tipo <code>v_list</code> na función con argumentos indefinidos. Nese momento chámase á clave <code>va_start</code> con dous argumentos: o primeiro é o declarado do tipo <code>va_list</code> e o segundo é o nome do último parámetro chamado da función. Despois cada chamada á clave <code>va_arg</code> dá paso ao seguinte argumento. O primeiro argumento para <code>va_arg</code> é o <code>va_list</code> e o seguinte é do tipo do seguinte argumento fornecido á función. Para rematar, a clave <code>va_end</code> debe chamarse dende o <code>va_list</code> antes de que a función devolva a execución (non é obrigatorio ler todos os argumentos).
 
Non existe ningún mecanismo para determinar a cantidade ou o tipo dos argumentos indefinidos pasados á función. A función debe sabelo ou determinalo dalgún xeito, que varía segundo o caso. Entre as convencións máis comúns están:
* Utilizar unha cadea cun formato similar ao usado por funcións coma <source lang=c enclose=none>printf()</source> ou <source lang=c enclose=none>scanf()</source> con especificadores incluídos que indiquen o tipo dos argumentos.
* Un valor sentinela ao final dos argumentos indefinidos.
* Un contador de argumentos sinalando a cantidade de argumentos indefinidos.
 
 
Liña 76:
 
<!-- Categorías: -->
 
[[Categoría:C ─ Biblioteca estándar|stdarg]]