Со знаком из перечисления в C/C99/C ++/C ++ x/GNU C/GNU C99

enum ввести подписанный или неподписанный? Со знаком из перечислений, отличаются по C/C99/ANSI C/C ++/C ++ x/GNU C/GNU C99?

Спасибо

31
задан James McNellis 5 April 2010 в 15:53
поделиться

1 ответ

Перечисление гарантированно будет представлено целым числом, но фактический тип (и его подпись) зависят от реализации.

Вы можете принудительно представить перечисление типом со знаком, задав одному из перечислителей отрицательное значение:

enum SignedEnum { a = -1 };

В C ++ 0x можно явно указать базовый тип перечисления:

enum ShortEnum : short { a };

(C ++ 0x также добавляет поддержку перечислений с ограниченной областью действия)

Для полноты я добавлю это в Язык программирования C, 2-е изд. , перечислители указаны как имеющие тип int (стр. 215). K&R не является стандартом C, поэтому он не является нормой для компиляторов ISO C, но он предшествует стандарту ISO C, так что это, по крайней мере, интересно с исторической точки зрения.

27
ответ дан 27 November 2019 в 22:47
поделиться