Date: Tue, 21 Dec 2004 21:06:32 -0500 From: Garance A Drosihn <drosih@rpi.edu> To: "Greg 'groggy' Lehey" <grog@freebsd.org>, FreeBSD Architecture Mailing List <arch@freebsd.org> Subject: Re: Header files with enums instead of defines? Message-ID: <p06200789bdee83ea0f66@[128.113.24.47]> In-Reply-To: <20041222010143.GS53357@wantadilla.lemis.com> References: <20041222010143.GS53357@wantadilla.lemis.com>
next in thread | previous in thread | raw e-mail | index | archive | help
At 11:31 AM +1030 12/22/04, Greg 'groggy' Lehey wrote:
>
>To find out what that means, I need to go to
>/usr/src/include/sys/errno.h and look for 17. I find:
>
>#define EEXIST 17 /* File exists */
>
>If we were to change this to
>
>enum EEXIST = 17; /* File exists */
>
>I'd then be able to see:
>
> xerrno = EEXIST,
>
>That makes debugging a whole lot easier. About the only down side
>I can see is that you can't #undef an enum. Is this a big deal?
You also can't #ifdef an enum.
You also can't:
enum EEXIST = 17;
I'm not a C expert, but you need something more like:
enum ERRVALS { EEXIST = 17 };
At least that compiles for me.
Some C compilers (irix) will also complain if you assign an
enum-value (such as EEXIST) to a variable which isn't of the same
enum-type (eg: ERRVALS). So, in those compilers you would have
to define 'xerror' as 'enum ERRVALS xerror', not 'int xerror'.
I think that isn't part of the C standard, but on occassion that
check has found a few bugs for me...
--
Garance Alistair Drosehn = gad@gilead.netel.rpi.edu
Senior Systems Programmer or gad@freebsd.org
Rensselaer Polytechnic Institute or drosih@rpi.edu
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?p06200789bdee83ea0f66>
