Пиша нещо с компилатора на CCS C 5.045 за PIC24F и попаднах на банален бъг който ме замота, беше неочаквано банален. И на други бъгове съм попадал, но да кажем, че някак се преживяват.
Накратко - SWITCH() работи правилно с отрицателни числа само ако проверяваната стойност е 16 бита (signed int16). При 8 бита (signed int8) се омазва. Дизасемблера показва, че при (signed int8) компилатора не се усеща и сравнява с int16.
Не съм тесвал при другите типове процесори.
This does not work correctly:
This does work correctly: