Al diseñar una API C para configurar una biblioteca/utilidad, tengo un compañero de trabajo que prefiere agrupar todos los parámetros de configuración en una llamada de función. Por ejemplo:C configuración API
int set_diagnostic_email_config(char *to_address,
bool include_timestamp,
bool send_for_crashes,
bool send_daily_status,
bool send_on_event1,
bool send_on_event2)
Una similares "llegar" existe la función de muchos parámetros .. La principal ventaja de este método es que si alguien añade una nueva opción, por ejemplo, "bool send_on_event3", a continuación, debido a que el prototipo se ha cambiado se ven obligados a actualizar cada lugar donde se usa esta llamada de función (suponiendo que haya múltiples lugares donde las personas llaman esto).
prefiero algo en la línea de:
int get_diagnostic_email_config(struct email_config *p_config);
int set_diagnostic_email_config(struct email_config *p_config);
donde se acaba de cambiar los elementos de la estructura, según sea necesario. Pero ... si alguien actualiza la estructura de email_config "no obliga a las personas a actualizar todos los lugares donde se usa (aunque a menudo queremos ...). Además, mi compañero de trabajo se queja de que si alguien intenta inicializarlo "email_config" a mano, luego si las cosas se agregan luego esos nuevos campos serán sin inicializar sin advertencias.
¿Hay algún consenso fuerte sobre qué método es el preferido? ¿O tal vez hay otra alternativa que me falta?
+1. Excelente consejo – DevSolar
+1 básicamente es OOP - más fácil de administrar cambios, mantener la implementación con el estado - constructor/destructor para inicializar la limpieza – stefanB
¡Gracias! Me gusta especialmente la idea de CONFIG_MAGIC. – Will