C:switch语句出错:“这是重叠该值的第一个条目”

问题描述 投票:0回答:1

我正在研究我的LED-Strip并使用HEX-Color-Codes来处理它。 现在,我希望通过使用switch语句更改Color-Code来创建平滑的彩虹效果。

 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)

我非常感谢你的帮助! 提前致谢!

c switch-statement
1个回答
1
投票
Line 3: case 0xffff00 ... 0x33ff00: 

您首先指定了较高的值。 它相当于说

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

Line 8:  case 0x0000ff ... 0x2000ff

这个范围与它上面的范围重叠0x0025ff ... 0x0005ff。 每个范围必须是不同的且不重叠的。

它相当于有两个范围:10 ... 2015 ... 17。它们重叠。 编译器应该为变量case选择哪个16


最后,这些错误消息非常清楚,并准确解释了问题所在。你为什么读这篇文章有困难?

阅读和理解错误消息是编程的核心技能。 (我之前从未见过这些错误,但是文字立即明白了问题是什么)

© www.soinside.com 2019 - 2024. All rights reserved.