我在8051项目中使用Keil C并且我收到错误C175 - 以下重复案例值:
switch (x)
{
case 0:
break;
case 1:
break;
case 2:
switch (y)
{
case 0:
break;
case 1:
break;
}
}
有什么想法吗?
答案 0 :(得分:2)
你的编译器坏了。 Keil因其标准不合规而臭名昭着。
C11 6.8.4.2/3
每个案例标签的表达式应为整数常量 表达式并没有两个案例常量表达式相同 转换后,switch语句应具有相同的值。也许有 在switch语句中最多只能有一个默认标签。 (任何封闭的 switch语句可能有一个默认的标签或case常量表达式 具有在封闭中复制大小写常量表达式的值 切换声明。)
以上粗体,规范性文本适用于C标准的任何版本。
答案 1 :(得分:1)
这可能是编译器错误。使用gcc,您的代码可以完美运行:http://ideone.com/u4svzf。这是经过测试的代码:
#include <stdio.h>
int main(void) {
int x, y;
switch (x) {
case 0:
break;
case 1:
break;
case 2:
switch (y) {
case 0:
break;
case 1:
break;
}
}
// your code goes here
return 0;
}
答案 2 :(得分:0)
您不能将“0”和“1”作为case语句放在另一个具有0和1的开关中。
您可以找到解释here。
[EDİT]:实际上解释说“在同一个声明中”,但我们从这里理解:在keil C中,我们不能将开关块包含在开关块中。就像@niklasfi说的那样,它在gcc中完美运行(我也试过)。