Date: Mon, 21 May 2001 15:26:30 -0700 (PDT) From: John Wilson <john_wilson100@excite.com> To: freebsd-questions@freebsd.org Subject: Question for C preprocessor gurus Message-ID: <11895256.990483991242.JavaMail.imail@zero.excite.com>
next in thread | raw e-mail | index | archive | help
In this program I'm writing, I need to define a simple list of errors, e.g.
#define ERR_OK 0
#define ERR_BAD 1
#define ERR_AWFUL 2
and a function to return error descriptions:
char *f(int error_no)
{
switch (error_no)
{
case ERR_OK:
return "OK";
case ERR_BAD:
return "Bad";
/* .... */
}
}
There is nothing wrong with this code, except one thing - to add a new
error, I need to do it in two different places. I was therefore wondering
if it was possible to avoid adding the same strings twice through (ab)use of
the preprocessor.
Of course, I could do something like this:
static char *Errors[] = {
"ERR_OK",
"ERR_BAD",
"ERR_TERRIBLE"
}
and then define
char* ErrorDescription(int error_code)
{
if ((error_code >= 0) &&
(error_code < sizeof(Errors)/sizeof(Errors[0])))
return Errors[error_code];
else
return "UNDEFINED ERROR";
}
but then I wouldn't be able to refer to the errors by name.
Ideally, I would like to say
DEFINE_ERROR(ERR_OK, 0)
DEFINE_ERROR(ERR_BAD,1)
and have the preprocessor generate something like this:
static char *Errors[] = {
#define ERR_OK 0
"ERR_OK",
#define ERR_BAD 1
"ERR_BAD"
}
Any ideas?
Thanks
John Wilson
_______________________________________________________
Send a cool gift with your E-Card
http://www.bluemountain.com/giftcenter/
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?11895256.990483991242.JavaMail.imail>
