1) При всех случаях в языке C компилятор не проверяет значение, как это касается enum.
Я не могу понять, если говорить о вашем племени.
1) При каких случаях в языке C компилятор не проверяет значение перечисления.[отредактировано]
При назначении на него.Разрешено присваивать пустые целые числа, поэтому вы можете сделать:
enum E { A, B } x;
x = 10000;
без ошибки компилятора.Кроме того, switch
es в перечислениях не проверяются на предмет исчерпываемости.
2) Почему константы перечисления не проверяются по некоторым причинам?Каковы эти причины?
Люди любят ставить в них целые числа.например.
enum E { END_OF_EVERYTHING = 5 };
, где 0-4 означают обычные значения, а 5 - особые.
3) Поскольку enum не проверяется компилятором, используя enumподвержен ошибкам?
Да.Поскольку перечисления имеют только значения наименьшего числа битов, которые могут принимать все значения перечисления, вы можете получить странные результаты:
enum E { A = 1, B = -1 };
Это перечисление содержит только 2 бита данных (значения -2, -1, 01).Если вы назначите ему 10000, могут произойти странные вещи (на самом деле это видно).