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
{
//...
}