Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #162901
| From | David Brown <david.brown@hesbynett.no> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: redeclaration of enumerators? |
| Date | 2021-10-01 15:37 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <sj72vg$5l7$1@dont-email.me> (permalink) |
| References | (11 earlier) <bf3ac5ed-f44b-4f8d-9ffe-ad9583ade948n@googlegroups.com> <sj6csf$dvm$1@dont-email.me> <sj6nkg$4am$1@dont-email.me> <e468277c-6174-4591-ac91-4ba7dcbf893cn@googlegroups.com> <sj6tkk$m4p$1@dont-email.me> |
On 01/10/2021 14:06, Bart wrote:
> On 01/10/2021 12:49, Malcolm McLean wrote:
>> On Friday, 1 October 2021 at 11:24:29 UTC+1, Bart wrote:
>>> On 01/10/2021 08:20, David Brown wrote:
>>>> On 30/09/2021 16:36, Malcolm McLean wrote:
>>>>> On Thursday, 30 September 2021 at 11:45:50 UTC+1, David Brown wrote:
>>>>>>
>>>>>> But I think that in most cases, it is not at all helpful to think
>>>>>> about
>>>>>> the underlying integer values. You get cleaner, safer, more portable
>>>>>> code if you treat the enumeration constants as being abstract symbols
>>>>>> that are members of the particular type without any other
>>>>>> semantics or
>>>>>> meaning.
>>>>>>
>>>>> I agree, but there are some snags. One is if you wish to print out
>>>>> the enum
>>>>> for debug purposes. It's easy enough to write printf("light %d\n",
>>>>> (int) lightenumval);
>>>>> If you have to set up an enum to string function then it's a bit
>>>>> clearer, but it's a huge
>>>>> hassle for debug.
>>>>> The other snag is that often you want to use the enum to index into
>>>>> a table
>>>>> of some sort. Again, you can set up a system by writing a switch,
>>>>> but that's
>>>>> likely slower and more code.
>>>>>
>>>>
>>>> These are not "snags" - they are cases where the underlying integer
>>>> value of the enumeration constants is sometimes helpful due to the
>>>> limitations of the language. Eventually, C++ will get some decent
>>>> compile-time reflection capabilities that will allow you to generate
>>>> strings from enumeration constants simply and easily, without
>>>> repetition
>>>> in the code (and without complicated X-macros).
>>>>
>>>> In the meantime, C99, and C++ with gcc extensions (unfortunately not
>>>> standard), let you write:
>>>>
>>>>
>>>> typedef enum Colours { red, green, blue } Colours;
>>>>
>>>> extern const char * const colour_names[];
>>>> const char * const colour_names[] = {
>>>> [red] = "red",
>>>> [green] = "green",
>>>> [blue] = "blue",
>>>> };
>>> This is not ideal:
>>>
>> For some purposes you really need a special function called something
>> like "enum_to_string",
>> as David Brown implied. Then const char *name = enum_to_string(red),
>> sets name to "red".
>> That would be good for debug messages,
>>
>> printf("Car crashed lights were %s\n", enum_to_string( lightvalue));
>>
>> maybe you could also use it in a database
>>
>> struct crashrecord
>> {
>> double speed;
>> bool aidrivingon;
>> char lasttrafficlights[8]; // red, amber, green
>> };
>>
>> However it wouldn't normally be acceptable for user-facing strings.
>>
>> To implement, you would need enums to be types, then enum_to_string
>> would be a bit like
>> "sizeof", a function (maths sense) which isn't a subroutine but a
>> keyword.
>>
>
> It would need a bit more than that. At the moment, C allows:
>
> enum { red=1, green=1, blue=1 };
>
> enum { red=1000000000, green=2000000000, blue=-2000000000 };
>
You apparently missed the topic of this thread branch. We are looking
at enumerations where the underlying integer constants are neither
specified nor used - we are looking at ways to treat them as higher
level, purely symbolic identifiers.
No language will help programmers who ignore the task in hand, skip the
conventions in use at the time, and write intentionally idiotic code.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
redeclaration of enumerators? Thiago Adams <thiago.adams@gmail.com> - 2021-09-27 10:39 -0700
Re: redeclaration of enumerators? John Bode <jfbode1029@gmail.com> - 2021-09-28 16:21 -0500
Re: redeclaration of enumerators? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-28 14:57 -0700
Re: redeclaration of enumerators? Thiago Adams <thiago.adams@gmail.com> - 2021-09-28 15:23 -0700
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-09-29 15:23 +0200
Re: redeclaration of enumerators? Mark Bluemel <mark.bluemel@gmail.com> - 2021-09-30 01:15 -0700
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-09-28 23:31 +0100
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-09-29 15:36 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-09-29 15:03 +0100
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-09-29 16:46 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-09-29 16:08 +0100
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-09-29 20:14 +0200
Re: redeclaration of enumerators? Thiago Adams <thiago.adams@gmail.com> - 2021-09-29 13:37 -0700
Re: redeclaration of enumerators? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-09-29 18:25 -0700
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-09-30 12:45 +0200
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-09-30 07:36 -0700
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-01 09:20 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 11:24 +0100
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-10-01 04:49 -0700
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 13:06 +0100
Re: redeclaration of enumerators? Tony Oliver <guinness.tony@gmail.com> - 2021-10-01 05:24 -0700
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 13:32 +0100
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-10-01 05:32 -0700
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 13:43 +0100
Re: redeclaration of enumerators? Mark Bluemel <mark.bluemel@gmail.com> - 2021-10-01 06:13 -0700
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-10-01 06:29 -0700
Re: redeclaration of enumerators? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-10-01 15:30 +0100
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-10-01 08:28 -0700
Re: redeclaration of enumerators? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2021-10-01 17:08 +0100
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-10-01 15:12 -0700
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-01 15:37 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 15:30 +0100
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-01 19:12 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 19:06 +0100
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-01 15:32 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 15:38 +0100
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-01 17:40 +0100
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-02 12:16 +0100
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-02 15:34 +0200
Re: redeclaration of enumerators? Bart <bc@freeuk.com> - 2021-10-02 15:16 +0100
Re: redeclaration of enumerators? Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-10-01 13:58 -0700
Re: redeclaration of enumerators? Richard Damon <Richard@Damon-Family.org> - 2021-10-01 17:21 -0400
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-10-01 14:56 -0700
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-02 12:21 +0200
Re: redeclaration of enumerators? scott@slp53.sl.home (Scott Lurndal) - 2021-09-30 14:47 +0000
Re: redeclaration of enumerators? Malcolm McLean <malcolm.arthur.mclean@gmail.com> - 2021-09-30 10:10 -0700
Re: redeclaration of enumerators? David Brown <david.brown@hesbynett.no> - 2021-10-01 09:24 +0200
Re: redeclaration of enumerators? Andrey Tarasevich <andreytarasevich@hotmail.com> - 2021-09-29 12:43 -0700
Re: redeclaration of enumerators? Branimir Maksimovic <branimir.maksimovic@gmail.com> - 2021-09-29 03:40 +0000
csiph-web