Imprimer le nom du fichier, le numéro de ligne et le nom de la fonction d’une fonction appelante – C Prog

Je veux créer un fichier log.c contenant des fonctions info (), debug () et error (). Ces fonctions fonctionnent sans imprimer le nom du fichier, le numéro de ligne, etc., etc. Ainsi, lorsque j’appelle l’une de ces fonctions, je souhaite transférer le nom du fichier, le numéro de ligne et le nom de la fonction de l’appelant. Alors, comment pouvons-nous retracer exactement? Existe-t-il un moyen de remonter sur C ou, si nous utilisons des macros, comment cela peut-il être fait?

Je transmettrais les données à la fonction via des parameters (peut-être obtenir l’aide d’une macro)

int info(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } int debug(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } int error(const char *fname, int lineno, const char *fxname, ...) { /* ... */ } 

Et les appeler

 info(__FILE__, __LINE__, __func__, ...); debug(__FILE__, __LINE__, __func__, ...); error(__FILE__, __LINE__, __func__, ...); 

Remarque: __func__ est C99; gcc, en mode C89 a __FUNCTION__

Si vous utilisez des macros, je pense que vous pouvez __FILE__ utilisant __FILE__ , __LINE__ et __FUNCTION__ . Par exemple,

 #define INFO(msg) \ fprintf(stderr, "info: %s:%d: ", __FILE__, __LINE__); \ fprintf(stderr, "%s", msg); 

Vous pouvez aussi utiliser des fonctions, mais vous devez passer __FILE__ , etc. pour vous assurer qu’elles ont la valeur correcte.