Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #162897

Re: redeclaration of enumerators?

From Bart <bc@freeuk.com>
Newsgroups comp.lang.c
Subject Re: redeclaration of enumerators?
Date 2021-10-01 13:43 +0100
Organization A noiseless patient Spider
Message-ID <sj6vp3$9b0$1@dont-email.me> (permalink)
References (12 earlier) <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> <6ce76fc9-f5ce-4cb4-9750-326b0a0a2ce0n@googlegroups.com>

Show all headers | View raw


On 01/10/2021 13:32, Malcolm McLean wrote:
> On Friday, 1 October 2021 at 13:06:56 UTC+1, Bart wrote:
>> On 01/10/2021 12:49, Malcolm McLean wrote:

>>> 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 };
>>
>> There are no restrictions at all. Think about how to_string might work
>> for any of these values. The first lot are impossible; the second,
>> inefficient.
>>
>> Think also about using these as switch-case values, or array indices, as
>> I noted.
>>
>> So the first step would be a special king of enum where the names are
>> inter-related and have a distinct, compact range of underlying values,
>> ideally consecutive.
>>
> There are three distinct situations I see.
> 
> The first is where the enum is a flag or comibation of flags which is used to
> pass multiple booleans /small integers efficiently.
> 
> The second is where the enum is a collection of labels which defines a set,
> but where there is no paticular mathematical relationship. For example
> amino acids in proteins.
> 
> The third is where you have a relationship such that the members are ordered.
> This might be a natural order (BABY, TODDLER, CHILD, TEENAGER, YOUTH,
> MIDDLEAGED, PENSIONER), or it might be a strong social convention (A, B, C ...).
> 
> The other logical situation is an ordering, with the added stipulation that the
> intervals be the same. I suggest that an enum is not suitable for this kind
> of data. If the intervals are the same, they must be based on some mathematical
> measure,and it's best to store that value explicitly.
> 

At least enums in C are still just aliases for integer values. (Look at 
what 'enum' means in Rust.)

But your first category uses enums simply because C has no other 
suitable features (#define and 'const int' have their own problems). 
they are just arbitrary values.

Other examples for your other two categories are:

    Spades, Clubs, Hearts, Diamonds

    Mon, Tue, Wed, Thu, Fri, Sat, Sun

But if you look at the internal numbering, both are going be 0..3 or 
0..6; that is, both sequential, both starting from the same value, and 
both ordered.

So why can't that second category be assumed to be ordered, even if it 
doesn't demand it?

You may have an array of such values, and may want to sort out it. It 
would be useful to know which enums are going to occur first.

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


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