Почему перечисления с отрицательными значениями вызывают проблемы в Objective-C / C?

По различным причинам реализации я определил следующее перечисление:

typedef enum HBSnakeMovementDirection
{
    HBSnakeMovementDirectionUp = 1,
    HBSnakeMovementDirectionDown = -1,
    HBSnakeMovementDirectionRight = 2,
    HBSnakeMovementDirectionLeft = -2
}
HBSnakeMovementDirection;

Однако, если я попытаюсь использовать HBSnakeMovementDirectionRight , я получу следующее предупреждение:

Неявное преобразование изменяет подпись: 'int' на 'HBSnakeMovementDirection'

У него нет проблем ни с одним из других значений перечисления. В чем проблема? Я думал, что это может быть связано со смешиванием отрицательных и положительных значений перечисления, но я не могу найти ничего окончательного по этому поводу.

(Я смог придумать все положительные значения перечисления, которые позволяют мне обойти эту проблему , но это все еще озадачило меня, поэтому я решил спросить об этом.)

Я должен заявить, что, как и во всех моих проектах, я включаю почти все предупреждения - следовательно, Жалобы -Wconversion - и рассматривать их как ошибки. (Я предпочитаю быть максимально строгим во время компиляции.) Я использую LLVM 1.6.

ОБНОВЛЕНИЕ 1 : Буквально любое использование HBSnakeMovementDirectionRight приводит к предыдущему предупреждению:

HBSnakeMovementDirection movementDirectionRight = HBSnakeMovementDirectionRight;

Мне нужно преобразовать HBSnakeMovementDirectionRight в HBSnakeMovementDirection , чтобы отключить предупреждение.

ОБНОВЛЕНИЕ 2 : По запросу, вот вся команда сборки, которая запускается на моем компьютере:

http://pastie.org/1580957

ОБНОВЛЕНИЕ 3 : Вот точный проект, над которым я работаю, размещенный на GitHub:

https://github.com/LucasTizma/Hebi

А именно следующее дерево:

https: // github. com / LucasTizma / Hebi / tree / 89262e2e53881584daf029e3dd5f1e99dfbd6f96

7
задан CIFilter 19 February 2011 в 01:40
поделиться