-
Notifications
You must be signed in to change notification settings - Fork 172
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Agregar attributes a funciones printf-like #148
Conversation
¡Grosso finding! Acá está la documentación oficial de GCC (en la sección Me pregunto si agregándolo en la macro que define cada una de las funciones de log no quede más prolijo (por agregarlo una sola vez, y porque podemos agregar o borrar niveles nuevos de log y mantener el comportamiento). Pero también me parece que está bueno tenerlo en la interfaz "pública" de la biblioteca - como está el PR actualmente. Si no convergemos a una respuesta convincente en un par de días, mergeemos así como está 👍 |
Ahí revisé y la única forma que tiene el compilador de darse cuenta que tiene que hacer esa validación es a través de la interfaz pública. Debe ser porque, al hacer #include <stdio.h>
#include <stdbool.h>
#include <sys/types.h>
typedef enum {
LOG_LEVEL_TRACE,
LOG_LEVEL_DEBUG,
LOG_LEVEL_INFO,
LOG_LEVEL_WARNING,
LOG_LEVEL_ERROR
} t_log_level;
typedef struct {
FILE* file;
bool is_active_console;
t_log_level detail;
char *program_name;
pid_t pid;
} t_log;
/**
* @NAME: log_create
* @DESC: ...
*/
t_log* log_create(char* file, char *program_name, bool is_active_console, t_log_level level);
/**
* @NAME: log_info
* @DESC: ...
*/
void log_info(t_log* logger, const char* message, ...) __attribute__((format(printf, 2, 3)));
int main() {
t_log* logger = log_create("yo-tengo-tu.log", "I_GOT_YOUR_LOG", 1, 0);
log_info(logger, "%s");
return 0;
} De hecho, se puede compilar este archivo con el flag |
Me había olvidado que #include <commons/string.h>
int main() {
char* s = string_from_format("Defensa y Justicia tiene %d libertadores");
string_append_with_format(&s, " y %d descensos");
return 0;
}
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
¡Grosso!
No sabía si gcc
chequeaba en la declaración o en la definición.
Listo, mandale cumbia nomás 👍
De la nada me encontré con que este atributo es el que hace que el compilador nos chille cuando la estemos pifiando con
printf(...)
. Al mergear este PR, va a pasar lo mismo en cualquier función de log 🎉