¿Podemos pasar una cantidad variable de argumentos a una función en c?variable pasante número de argumentos
Respuesta
Here es un ejemplo:
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
int maxof(int, ...) ;
void f(void);
int main(void){
f();
exit(EXIT SUCCESS);
}
int maxof(int n_args, ...){
register int i;
int max, a;
va_list ap;
va_start(ap, n_args);
max = va_arg(ap, int);
for(i = 2; i <= n_args; i++) {
if((a = va_arg(ap, int)) > max)
max = a;
}
va_end(ap);
return max;
}
void f(void) {
int i = 5;
int j[256];
j[42] = 24;
printf("%d\n", maxof(3, i, j[42], 0));
}
+1 por ejemplo ... Me gustan los ejemplos ... – Matthieu
¿No obtengo el uso del 'registro' aquí? – haroldcampbell
El uso de 'register' es evidencia de que la muestra del código es bastante antigua. El uso de 'register' es una sugerencia para el compilador para colocar la variable en un registro de máquina, como una optimización del rendimiento. La mayoría de los compiladores de C en los últimos 30 años han ignorado esa pista, ya que pueden hacer un mejor trabajo de asignación de registros que la mayoría de los programadores. Hoy en día, 'register' tiene pocos efectos además de prohibir el cálculo de la dirección de una variable. – Peter
Sí, si la función acepta argumentos variables. Si necesita hacer su propia función de argumento variable, hay macros que comienzan con va_ que le dan acceso a los argumentos.
No es precisamente incorrecto, pero no es muy útil. –
asegúrese de que la lista de argumentos variable debe estar siempre al final de la lista de argumentos
ejemplo: void func(float a, int b, ...)
es correcta
pero void func(float a, ..., int b)
no es válido
Sí, pero esto es más un comentario que una respuesta. Ciertamente, has explicado un aspecto, pero es un aspecto muy secundario de la respuesta. –
"Debería considerar que usando funciones variadas (estilo C) es una falla peligrosa ", dice Stephane Rolland. Puede encontrar su útil publicación here.
Creo que el consejo es escribir sus propias funciones variadic personalizadas en C++ y no para las proporcionadas por la biblioteca estándar. Solo, imagina la vida sin 'printf'! –
- 1. Pasando Variable Número de argumentos
- 2. Número de variable de argumentos en VB
- 3. Función con número variable de argumentos
- 4. C++ con número variable de argumentos
- 5. Módulo de extensión Python con número variable de argumentos
- 6. Formato de cadena con número variable de argumentos en java
- 7. Pasando número variable de argumentos de una función a otra
- 8. Pasando el número variable de argumentos alrededor de
- 9. Número de variable de Java o argumentos para un método
- 10. cadena pasante rompecabezas
- 11. Cómo hacer una macro variadic (número variable de argumentos)
- 12. Pasando variable número de argumentos con diverso tipo - C++
- 13. Cómo "transmitir" un número variable de argumentos a NSString's + stringWithFormat:
- 14. Cómo pasar un número variable de argumentos a ant exec
- 15. ¿Número incorrecto de argumentos?
- 16. Mockito usando argumentos coincidentes para cuando llame al método con número variable de argumentos
- 17. Cuándo utilizar pasante() en literales de cadena
- 18. argumentos de longitud variable C#
- 19. PHP argumentos de longitud variable?
- 20. Número máximo de argumentos Bash! = Max argumentos num cp?
- 21. Boost bind argumento de marcador de posición igual al número de argumentos de plantilla variable
- 22. ¿Número de variable de argumentos sin boxeo de los tipos de valor?
- 23. Paso de argumentos variable a otra función que acepta una lista de argumentos variable
- 24. Funciones de PHP: número máximo de argumentos
- 25. Número de variable de argumentos en el procedimiento almacenado PL/SQL
- 26. C++: puntero de función para funciones con número variable de argumentos
- 27. Una función con número variable de argumentos con tipos conocidos, el camino de C++ 11
- 28. Registrar un mensaje con un número variable de argumentos de estilo printf
- 29. rieles simple_nested_form_for fields_for número incorrecto de argumentos
- 30. Cómo pasar el número variable de argumentos a una función PHP
Dicha función se denomina [función variadica] (http://www.gnu.org/s/libc/manual/html_node/Variadic-Functions.html) (para aquellos que buscan buenas palabras clave de búsqueda). – Seth
Gracias. Me ayudó – Shweta
¿Alguna vez ha usado 'printf'? – dan04