According to this SO post:
What is the size of an enum in C?
enum types have signed int
type.
I would like to convert an enum definition from signed int
to unsigned int
.
For example, on my platform an unsigned int
is 32-bits wide.
I want to create an enum:
typedef enum hardware_register_e
{
REGISTER_STATUS_BIT = (1U << 31U)
} My_Register_Bits_t;
My compiler is complaining that the above definition is out of range (which it is for a signed int
).
How do I declare unsigned int
enum
values?
According to this SO post: What is the size of an enum in C? enum types have signed int type.
The thing is enum
types can be int
type but they are not int
in C. On gcc
1), enum
types are unsigned int
by default.
enum
constants are int
but enum
types are implementation defined.
In your case the enum
constant is int
but you are giving it a value that does not fit in a int
. You cannot have unsigned int
enum
constants in C as C says they are int
.