в чем преимущество использования отрицательных перечислений - PullRequest
3 голосов
/ 26 апреля 2010

В примере анализатора калейдоскопа / AST при LLVM перечислению присваиваются все отрицательные значения. Почему знак минус?

enum Token {
  tok_eof = -1,
  // commands
  tok_def = -2, tok_extern = -3,
  // primary
  tok_identifier = -4, tok_number = -5
};

Ответы [ 2 ]

3 голосов
/ 26 апреля 2010

Распространенная идиома C с перечислениями - использовать отрицательные значения для обозначения одного набора условий и положительные значения для обозначения другого набора.Например, условия ошибки парсера могут быть всеми положительными значениями, тогда как нормальные условия имеют все отрицательные значения, и, возможно, ноль - это «неопределенный» случай.Так что в вашем коде тестирование на любую ошибку так же просто, как tok >= 0.

2 голосов
/ 26 апреля 2010

Я считаю, что использование этих отрицательных значений было просто способом обозначить специальные токены в коде.

В примере кода допустимые токены имеют значения от 0 до 255, поэтому любое значение из этого диапазона можно использовать для специальных токенов, таких как tok_eof. Поэтому, поскольку от 0 до 255 нельзя использовать для перечисления, они решили использовать отрицательные значения, хотя они могли бы использовать 256, 257, 258 и т. Д. Отрицательные значения кажутся более ложными, чем 256, 257, 258 IMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...