Gcc 4.4.1 C99
J'ai écrit une fonction que j'utiliserai pour afficher des messages à l'utilisateur. Cette fonction fonctionne correctement, et j'ai besoin qu'elle soit évolutive car j'aurai d'autres codes d'erreur à ajouter plus tard.
Toutefois, les entrées seront la priorité, le code d'erreur et une brève description de l'erreur. J'ai inclus la fonction et le numéro de ligne.
Cependant, je souhaite intégrer l'appel de la fonction dans une macro, mais je ne sais pas exactement comment m'y prendre ?
Quelqu'un peut-il m'indiquer la marche à suivre pour écrire ?
Merci de me faire part de vos suggestions,
#include <stdio.h>
#include <stdarg.h>
typedef enum
{
ST_BIND_ERR = 1,
ST_SOCK_ERR,
ST_CONNECT_ERR,
ST_ACCEPT_ERR
}error_codes;
typedef enum
{
ST_CRITICAL = 1,
ST_WARNING,
ST_DEBUG,
ST_INFO
}priority;
#define REPORT(prio, err, msg) /* Defining macro here */
void report_msg(int prio, int err, const char *fmt, ...);
int main(void)
{
printf("=== Starting program ===\n");
report_msg(ST_WARNING, ST_CONNECT_ERR, "Error trying to make connection : FUNCTION [ %s ] : LINE [ %d ]",
__func__, __LINE__);
return 0;
}
void report_msg(int prio, int err, const char *fmt, ...)
{
va_list ap;
char priority_msg[512] = {0};
char error_code[256] = {0};
char format[256] = {0};
char output_msg[256] = {0};
switch(prio)
{
case ST_CRITICAL:
sprintf(priority_msg, "[ ST_CRITICAL ]");
break;
case ST_WARNING:
sprintf(priority_msg, "[ ST_WARNING ]");
break;
case ST_DEBUG:
sprintf(priority_msg, "[ ST_DEBUG ]");
break;
case ST_INFO:
sprintf(priority_msg, "[ ST_INFO ]");
break;
default:
sprintf(priority_msg, "[ UNKNOWN_PRIO ]");
break;
}
switch(err)
{
case ST_BIND_ERR:
sprintf(error_code, "[ ST_BIND_ERR ]");
break;
case ST_SOCK_ERR:
sprintf(error_code, "[ ST_SOCK_ERR ]");
break;
case ST_CONNECT_ERR:
sprintf(error_code, "[ ST_CONNECT_ERR ]");
break;
case ST_ACCEPT_ERR:
sprintf(error_code, "[ ST_ACCEPT_ERR ]");
break;
default:
sprintf(error_code, "[ UNKNOWN_ERR ]");
break;
}
va_start(ap, fmt);
vsprintf(format, fmt, ap);
va_end(ap);
sprintf(output_msg,"%s %s %s", priority_msg, error_code, format);
fprintf(stderr, output_msg);
}