请问题这段代码有什么错呢?
delphi xe8和xe10都报 Duplicate case label 错呢?
procedure TForm1.FormCreate(Sender: TObject);
var
c: Char;
begin
case c of
#130:
ShowMessage(#130);
#131:
ShowMessage(#130);
#132:
ShowMessage(#130);
#133:
ShowMessage(#130);
#134:
ShowMessage(#130);
#135:
ShowMessage(#130);
#136:
ShowMessage(#130);
end;
end;
label标签重复,看看完整的代码
代码就只写这么一段。没有其他代码
duplicate就是重复的意思,没有别的代码,怎么改呢
编程是一种美德,是促使一个人不断向上发展的一种原动力。
改成这样编译就可以问题:
procedure TForm1.FormCreate(Sender: TObject);
var
c: Char;
begin
case c of
#30:
ShowMessage(#130);
#31:
ShowMessage(#130);
#32:
ShowMessage(#130);
#33:
ShowMessage(#130);
#34:
ShowMessage(#130);
#35:
ShowMessage(#130);
#36:
ShowMessage(#130);
end;
end;
“Duplicate case label”,就是case语句中,出现相同的选择of指定值。
原因分析:
一、Delphi 7 中Char类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF。
Delphi 2010之后,Char 默认 WideChar 二个字节,它的取值范围,就是ASCII码。
二、Delphi 7 中#130..#136是ASCII码,它们是有效的不同字符。
Delphi 2010之后,#130..#136不是有效的字符,对应的字符是空(无字符)。
这样,在XE8中下述代码,就会出现: “Duplicate case label”错误:
var c: Char;
begin
case c of
#130: ShowMessage(#130);
#131: ShowMessage(#130);
#132: ShowMessage(#130);
#133: ShowMessage(#130);
#134: ShowMessage(#130);
#135: ShowMessage(#130);
#136: ShowMessage(#130);
end;
end;
上述代码在Delphi7中,不会出现错误。
如果在Delphi7中,执行下述代码,同样出现“Duplicate case label”错误:
var c: Char;
begin
case c of
#56: ShowMessage(#130);
#56: ShowMessage(#130);
#56: ShowMessage(#130);
#56: ShowMessage(#130);
#56: ShowMessage(#130);
#56: ShowMessage(#130);
#56: ShowMessage(#130);
end;
end;