Printing Errors
From C
Code Sample #1
The following code sample associates the error message with the error code by using the index of an array, which makes it appropriate only for non-negative error codes, and with a maximum range that's suited for the length of an array.
#include <stdio.h>
enum errors {
ERROR1,
ERROR2,
ERROR3
};
char *errors[] = {
[ERROR1] = "ERROR1: ...",
[ERROR2] = "ERROR2: ...",
[ERROR3] = "ERROR3: ..."
};
int main(void) {
printf("%s", errors[ERROR2]);
return 0;
}
Code Sample #2
The following code sample associates the error message with the error code by using a function that searches the error code, and therefore it doesn't share the concerns mentioned for the previous code sample.
#include <stdio.h>
enum error_e {
ERROR1 = 10000,
ERROR2,
ERROR3
};
struct error_s {
enum error_e error;
char *s;
};
struct error_s errors[] = {
{ ERROR1, "ERROR1: ..." },
{ ERROR2, "ERROR2: ..." },
{ ERROR2, "ERROR3: ..." }
};
#define array_len(a) (sizeof a / sizeof *a)
char *get_error(enum error_e error) {
for (size_t i = 0; i < array_len(errors); i++) {
if (errors[i].error == error)
return errors[i].s;
}
return "Unknown error code.";
}
int main(void) {
printf("sizeof errors (array): %zu\n", sizeof errors);
printf("%s\n", get_error(ERROR2));
return 0;
}
.
