C: Ошибка в операторе switch: «это первая запись, перекрывающая это значение» - PullRequest
0 голосов
/ 23 февраля 2019

В настоящее время я работаю над своей светодиодной полосой и использую цветовые коды HEX для работы с ней.
Теперь я хотел создать плавный эффект радуги, изменив цветовой код с помощью оператора switch.

 1    switch(M0_Color){
 2      case 0xff3300 ... 0xffcc00: M0_Color += 0x003300; break;
 3      case 0xffff00 ... 0x33ff00: M0_Color -= 0x330000; break;
 4      case 0x00ff00 ... 0x00ffcc: M0_Color += 0x000033; break;
 5      case 0x00ffff ... 0x0066ff: M0_Color -= 0x003300; break;
 6      case 0x0033ff: M0_Color = 0x0025ff; break; //Smoother transition
 7      case 0x0025ff ... 0x0005ff: M0_Color -= 0x000500; break;
 8      case 0x0000ff ... 0x2000ff: M0_Color += 0x0500ff; break;
 9      case 0x2500ff: M0_Color = 0x3300ff; break; //Smoother transition
10      case 0x3300ff ... 0xcc00ff: M0_Color += 0x330000; break;
11      case 0xff00ff ... 0xff0066: M0_Color -= 0x000033; break;
12      case 0xff0033: M0_Color = 0xff0025; break; //Smoother transition
13      case 0xff0025 ... 0xff0005: M0_Color -= 0x000005; break;
14      case 0xff0000 ... 0xff2000: M0_Color += 0x000500; break;
15      case 0xff2500: M0_Color = 0xff3300; break;
16    }

M0_Color - это переменная для цвета.Значение для начала: 0xff3300 .
Показанный код работает в цикле.
К сожалению, у меня есть только ограниченные возможности, и это наиболее привлекательный вариант.
Теперь,когда я его компилирую, выдает две ошибки и предупреждение:
**Warning**: "empty range specified" (here: in code lines 3, 5, 7, 11, 13)
**Error 1**: "duplicate (or overlapping) case value" (here: in code lines 8, 14)
**Error 2**: "this is the first entry overlapping that value" (here: in code lines 7, 13)

Я очень признателен за помощь!
Спасибо зазаранее!

1 Ответ

0 голосов
/ 23 февраля 2019
Line 3: case 0xffff00 ... 0x33ff00: 

Сначала вы указали более высокое значение.
Это эквивалентно высказыванию

case 99 ... 10:    //* Specifying an empty range.  You want 10 ... 99

Line 8:  case 0x0000ff ... 0x2000ff

Этот диапазон перекрывается с диапазоном выше 0x0025ff ... 0x0005ff.
Каждый диапазон должен быть отдельным и не перекрывающимся.

Это эквивалентно наличию двух диапазонов: 10 ... 20, а также 15 ... 17.Они перекрываются.
Какой case должен выбрать компилятор для переменной 16 ??


Наконец, эти сообщения об ошибках совершенно ясны и точно объясняют, в чем проблема.Почему у вас возникли трудности при чтении этого?

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

...