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


Groups > comp.lang.c > #150279

Re: clarification about enums in C

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: clarification about enums in C
Date 2020-02-27 09:50 +0100
Organization A noiseless patient Spider
Message-ID <r37vss$f30$1@dont-email.me> (permalink)
References <aaf0f57f-4ae1-4c4a-a0aa-314eade48440@googlegroups.com> <r35hab$ts9$1@dont-email.me> <5c585469-72c8-42f8-9e74-848f160db602@googlegroups.com>

Show all headers | View raw


On 26/02/2020 23:05, already5chosen@yahoo.com wrote:
> On Wednesday, February 26, 2020 at 12:29:40 PM UTC+2, David Brown wrote:
>> On 26/02/2020 00:38, Thiago Adams wrote:
>>> From the standard:
>>>
>>> "The identifiers in an enumerator list are declared as constants 
>>> that have type int and may appear wherever such are permitted.127)"
>>>
>>> But there is a foot note:
>>>
>>> "Each enumerated type shall be compatible with char, a signed 
>>> integer type, or an unsigned integer type. The choice of type 
>>> is implementation-defined,128)"
>>>
>>> "128) An implementation may delay the choice of which integer 
>>> type until all enumeration constants have been seen."
>>>
>>> I am confused. 
>>>
>>
>> You are not the first person to feel that way.
>>
>>> enum E { A, B};
>>
>> The key weirdness of "enum" in C is that "enum E" is a type, but A and B
>> are not objects of that type.  They are, however, members of the
>> enumeration "E".
>>
>> "A" and "B" are named integer constant values (much like 'a' and 'b').
>> So they have type "int".
>>
> 
> That' how language of the standard sounds.
> But it's not how gcc and clang work.
> 
> enum enum_t {
>  uns = (unsigned)-1,
>  neg = -1,
> };
> Both in gcc and in clang uns has type 'unsigned int' rather than 'int'.
> And indeed it differs from type of 'enum_t' which in ths case is 'int'.

This is an extension that these tools support - as do many compilers.
If you want to ensure that you stick to standards-only code, use
"-Wpedantic" (along with your choice of -std=c11, -std=c99 or -std=c90),
and pay attention to the warnings.  The C standard does not say how
"uns" should be treated, gcc's extensions do the "obvious" thing.

> 
> Microsoft's compiler (VS2015) is easier to understand and don't
> violate (my understanding of) Standard, but it is less flexible -
> everything, including uns, is 'int'.
> 

Extensions don't violate the standard if they give defined effects to
something the standards don't define - they only violate it if they stop
otherwise valid C code being properly handled (such as gcc's "asm"
extension conflicting with an identifier "asm" in standard C), or if the
compiler fails to give a mandatory diagnostic.

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


Thread

clarification about enums in C Thiago Adams <thiago.adams@gmail.com> - 2020-02-25 15:38 -0800
  Re: clarification about enums in C luser droog <luser.droog@gmail.com> - 2020-02-25 19:19 -0800
  Re: clarification about enums in C James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-25 21:17 -0800
    Re: clarification about enums in C Thiago Adams <thiago.adams@gmail.com> - 2020-02-27 04:01 -0800
  Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-26 11:29 +0100
    Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-26 14:05 -0800
      Re: clarification about enums in C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-26 23:03 +0000
        Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-26 23:29 -0800
          Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-27 01:42 -0800
            Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 11:02 +0100
              Re: clarification about enums in C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2020-02-27 06:37 -0800
                Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 16:18 +0100
                Re: clarification about enums in C James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-27 23:24 -0500
      Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 09:50 +0100
        Re: clarification about enums in C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2020-02-27 06:33 -0800
          Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-27 06:53 -0800
          Re: clarification about enums in C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-27 15:05 +0000
          Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 16:24 +0100
          Re: clarification about enums in C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2020-02-28 01:27 -0800
      Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-27 01:29 -0800
        Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 11:12 +0100
          Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-27 03:09 -0800
            Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 14:33 +0100
              Re: clarification about enums in C already5chosen@yahoo.com - 2020-02-27 05:44 -0800
                Re: clarification about enums in C David Brown <david.brown@hesbynett.no> - 2020-02-27 14:57 +0100
        Re: clarification about enums in C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-27 11:53 +0000
          Re: clarification about enums in C James Kuyper <jameskuyper@alumni.caltech.edu> - 2020-02-27 23:52 -0500
            Re: clarification about enums in C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2020-02-28 01:30 -0800
  Re: clarification about enums in C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-26 14:09 +0000
    Re: clarification about enums in C Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2020-02-26 09:47 -0800
      Re: clarification about enums in C Ben Bacarisse <ben.usenet@bsb.me.uk> - 2020-02-26 21:04 +0000

csiph-web