An underlying type is the integer type used to represent a C enumeration. Without an explicit choice, the implementation adjusts it to hold every enumeration constant; this can produce platform-dependent signed or unsigned types. section 5.6.2
Use explicit underlying types when enumeration values may exceed signed int:
- C23 permits enum wider : long, forcing long as the underlying type and giving its constants the enumeration type. section 5.6.2

