C开关箱标签值已出现



IDE为什么认为有错误?

"案例标签值已出现在该开关的第9行C/C++(1578(";

int main(int argc, char const *argv[])
{
for (int i = 0; i < argc; i++)
{
switch (*argv[i])
{
case 'drow': printf("drow detected");
break;
case 'drows': printf("drows detected"); //line 9
break;
case 'rows': printf("rows detected"); //error at the first apostrophe '
break;
default: printf("Unknown arg, skipping.");
break;
}  
}
return 0;
}

您正在使用一个多字节字符常量作为标签

case 'drow':

它的值是由类型int定义的实现。

C标准6.4.4.4字符常量。

包含多个字符的整数字符常量的值字符(例如"ab"(,或包含字符或转义序列不映射到单字节执行字符的实现定义。

因此,常数'drow''drows'似乎具有相同的整数值。

编译器可能会发出一条消息,说明常量'drows'对于其类型而言太长。

另一方面,切换语句中使用的表达式

switch (*argv[i])

不是多字节字符。因此,在任何情况下,switch语句都没有意义。

您可以使用if-else语句来代替switch语句。例如

if ( strcmp( argv[i], "drow" ) == 0 )
{
//...
}
else if ( strcmp( argv[i], "drows" ) == 0 )
{
//...
}
else if ( strcmp( argv[i], "rows" ) == 0 )
{
//...
}
else
{
//...
}

最新更新