entiendo que la diferencia entre los printf
, fprintf
, sprintf
funciones, etc y la vprintf
, vfprintf
, vsprintf
funciones etc tiene que ver con la forma en que se ocupan de los argumentos de la función. ¿Pero cómo específicamente? ¿Hay realmente alguna razón para usar una sobre la otra? ¿Debo usar siempre printf
ya que eso es algo más común de ver en C, o hay una razón legítima para elegir vprintf
?¿cuál es la diferencia entre las familias de funciones printf y vprintf, y cuándo debo usar una sobre la otra?
Respuesta
printf()
y sus amigos son de uso normal. vprintf()
y amigos son para cuando quiere escribir su propia función printf()
-like. Digamos que usted quiere escribir una función para imprimir errores:
int error(char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
// what here?
va_end(args);
return result;
}
Se dará cuenta de que no se puede pasar a args
printf()
, printf()
ya lleva muchos argumentos, en lugar de uno va_list
argumento. Los vprintf()
funciones, sin embargo, hacen tomar un argumento va_list
en lugar de un número variable de argumentos, por lo que aquí es la versión completa:
int error(char *fmt, ...)
{
int result;
va_list args;
va_start(args, fmt);
fputs("Error: ", stderr);
result = vfprintf(stderr, fmt, args);
va_end(args);
return result;
}
Usted nunca querrá usar vprintf()
directamente, pero es increíblemente útil cuando necesita, por ej. envolver printf()
. Para estos casos, definirá la función de nivel superior con argumentos variables (...). Luego, los recopilará en un va_list
, realice su procesamiento y, finalmente, llame al vprintf()
en el va_list
para obtener la impresión.
- 1. ¿Cuál es la diferencia entre # import y @class, y cuándo debo usar uno sobre el otro?
- 2. ¿Cuál es la diferencia entre printf ("% i") y printf ("% d")
- 3. Python: ¿cuál es la diferencia entre (1,2,3) y [1,2,3], y cuándo debo usar cada uno?
- 4. Cuál es la diferencia entre las funciones VarIsEmpty y VarIsEmptyParam
- 5. ¿Cuál es la diferencia entre printf() y puts() en C?
- 6. ¿Cuál es la diferencia entre LinkedList y ArrayList, y cuándo usar cuál?
- 7. ¿Cuál es la diferencia entre un diccionario y una matriz?
- 8. ¿Cuál es la diferencia entre JTA y una transacción local?
- 9. En R, ¿cuál es la diferencia entre unlink y file.remove?
- 10. En Linq, ¿cuál es la diferencia entre .FirstOrDefault y .SingleOrDefault
- 11. ¿Cuál es la diferencia entre WebConfigurationManager y ConfigurationManager?
- 12. En Twisted ¿cuál es la diferencia entre processExited y processEnded?
- 13. Cuál es la diferencia entre HTTPS y TCP sobre SSL
- 14. ¿Cuál es la diferencia entre el operador "=" y "==" en Bash?
- 15. ¿Cuál es la diferencia entre usar WorkflowInvoker y WorkflowApplication?
- 16. cuál es la diferencia entre las plantillas y el polimorfismo
- 17. ¿Cuál es la diferencia entre ContentControl y ContentPresenter?
- 18. ¿Cuál es la diferencia entre Int32 y UInt32?
- 19. ¿Cuál es la diferencia entre los especificadores de conversión% i y% d en las funciones formateadas de IO (* printf/* scanf)
- 20. ¿cuál es la diferencia entre unicorn_rails y unicorn?
- 21. Diferencia entre funciones globales y de dispositivo
- 22. En PHP, ¿cuál es la diferencia entre hash y mhash?
- 23. ¿Cuál es la diferencia entre estas funciones?
- 24. ¿Cuál es la diferencia entre // y /// en Visual Studio?
- 25. ¿Cuál es la diferencia entre DBI y DBD?
- 26. ¿Cuál es la diferencia entre `alias` y` typedef`?
- 27. Linq: ¿Cuál es la diferencia entre Seleccionar y Dónde
- 28. ¿Cuál es la diferencia entre separar un Fragmento y eliminarlo?
- 29. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 30. ¿cuál es la diferencia entre QString y QLatin1String?
Por supuesto, a continuación, desea una función '' advertir() que funciona como 'error()' pero imprime "Warning:" en su lugar, por lo que crea su función de estilo _own_ 'vprintf()': 'int verror (char * prefix, char * fmt, va_list args);' y tiene 'error()' llama a eso con "Error:" y "warn()" llámalo con "Advertencia:" pero todo es semántica. –
¡hora de aprender sobre funciones variadic! Esta respuesta despejó las cosas, gracias. –