大家有没有碰到过Delphi对某行代码不进行编译的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 wanderld
  • 开始时间 开始时间
W

wanderld

Unregistered / Unconfirmed
GUEST, unregistred user!
莫名其妙delphi对某行代码不进行编译,并且提示该行代码中的变量没有使用。
delphi怎么能自做主张认为这行代码无用呢?
注意,代码是合法的,只是编译后左边不出现蓝点
 
莫名其妙delphi对某行代码不进行编译,并且提示该行代码中的变量没有使用。
delphi怎么能自做主张认为这行代码无用呢?
注意,代码是合法的,只是编译后左边不出现蓝点
 
比如.
procedure AFunc();
var
aInt: Integer;
begin
aInt:= 10;//这行肯定不会被执行。因为它的操作对于运行效果根本没有任何作用。
end;
这个现象是编译器的优化。正常。而且应该不会影响程序的执行结果。
 
可是dephi也太自信了吧,万一那一行代码有用的,呵呵,我的代码如下
label nextk;
var ar:array[1..30,1..2]of byte;
fl:array[1..32]of boolean;
i,k,po,m,hedx:integer; st:string;
begin
for i:=1 to 32 do fl:=true;
for k:=1 to 32 do//ËÑË÷ÿ¸ö½ÚµãµÄ×îСÍø¿×
begin
po:=1;//βָÕë
hedx:=1;//¿í¶ÈÓÅÏÈÍ·Ö¸Õë
ar[po,1]:=k;fl[k]:=false;

for i:=1 to 37 do
begin
if (ar[hedx,1]=toplogy[i,1]) and (not fl[toplogy[i,2]])and(toplogy[i,2]<>ar[hedx,1]) then//Êä³ö
begin
inc(po);
ar[po,1]:=toplogy[i,2];
st:='';

while ar[po,1]<>k do begin st:=st+inttostr(ar[po,1])+',';po:=ar[po,2];end;
self.memo1.lines.add(st+inttostr(k));
//ÇåÀí
for m:=1 to 32 do fl[m]:=true;
goto nextk;
end;
if (ar[hedx,1]=toplogy[i,2]) and (not fl[toplogy[i,1]])and(toplogy[i,1]<>ar[hedx,1]) then//Êä³ö
begin
inc(po);
ar[po,1]:=toplogy[i,1];
st:='';
while ar[po,1]<>k do begin st:=st+inttostr(ar[po,1])+',';po:=ar[po,2];end;
self.memo1.lines.add(st+inttostr(k));
//ÇåÀí
for m:=1 to 32 do fl[m]:=true;
goto nextk;
end;
if (ar[hedx,1]=toplogy[i,1]) and (fl[toplogy[i,2]]) then
begin
//¼ÓÈë¶ÓÁÐ
inc(po);
ar[po,1]:=toplogy[i,2];
ar[po,2]:=hedx;
fl[toplogy[i,2]]:=false;
end;
if (ar[hedx,1]=toplogy[i,2]) and (fl[toplogy[i,1]]) then
begin
//¼ÓÈë¶ÓÁÐ
inc(po);
ar[po,1]:=toplogy[i,1];
ar[po,2]:=hedx;
fl[toplogy[i,1]]:=false;
end;
end;

hedx:=hedx+1;//why not compiled??这一行死活不编译
//caption:=inttostr(hedx);//加上这一行的话上一行才编译,可是上面的代码明明用到了hedx,编译器却提示没有用?!!


nextk:caption:='a';
end;
 
这种情况是会有的,不过DELPHI的编译器,是将其编译了.在以下情况也会有这种情况
如设立变量后没有对其进行赋值,而在条件语句对其进行赋值,则系统会因为可能没有
进行初始化而提示,这个变量没有使用过,可以取消掉,但在运行时系统会动态加载,有/
些像VB的变量,所以DELPHI的运行速度与效率会有所影响,若是C++这些编译则会好一些!
 
原因可能多种多样,
我希望知道出现这种情况后
有没有办法不改代码让delphi编译
有人说实际上delphi编译了,但是从跟踪情况来看
这一行代码根本不执行
 
它好像有 ++1 的函数,inc() 吧,我也不太清楚
 
把优化去掉试试。
 
//来自:wanderld, 时间:2005-8-9 20:25:19, ID:3161622
//hedx:=hedx+1;//why not compiled??这一行死活不编译
这个语句没有任何用处,因为在此之后hedx不再使用。
 
编译器有自作聪明吗?
你在hedx:=hedx+1;之后根本就没有再对hedx有任何操作,这行代码自然是无效的了。
 
楼上的两位说该行代码没用的,
应该注意到这代码是在循环里面
 
楼上的是不是程序结构写错了?
你的程序中hedx是在外循环当中,而每次外循环重新开始后其都已经被重新赋为1了!
for k:=1 to 32 do
begin
po:=1;
hedx:=1; //如果把这行注释掉,你看看DELPHI还会不会忽略你下面那句!

//你的内循环
hedx := hedx+1;
end;
你看这里hedx:=hedx+1还有意义吗?
如果这不是你想要的,你该庆幸编译器帮你发现了错误,它的确是很智能的
 
是啊,正常啊。
在菜单Project的Option中,有个复选框,是Complete Boolean expression。如果不选中它,就可能有一个布尔表达式没有计算。
 
还是someset看得仔细,hedx := hedx+1这行是废代码,除非加上caption:=inttostr(hedx)使hedx+1变有用,才会编译。
如果hedx不是过程内的变量,它也会编译,因为delphi不知道什么地方会用到,所以会编译。
 
多人接受答案了。
 
后退
顶部