没人理我:
谁能解释一下
xx:Variable 'xx' inaccessible here due to optimization
产生的原因和避免的方法!我一定加分!
谁能解释一下
xx:Variable 'xx' inaccessible here due to optimization
产生的原因和避免的方法!我一定加分!
解决方案 »
- 使用clientdataset去重复文本,求助
- 新手有问题要问:incompatibe types
- 有个D7的程序,我想迁到2010上
- 能否在delphi开发的应用程序中一执行多条SQL语句??
- 50急求: 如何实现判断当前程序不运行,则1分种后,弹出登陆框!
- 关于IdTCPServer1向客户端发送数据问题
- 有没有办法 枚举类的所有属性和方法?
- 可以把多个PROJECT一起编译成一个程序吗?
- DBGrid 中文印出乱码
- 小白楼主又来问关于数据库连接的问题了...
- 客户要求做个网上查询电费系统,用Delphi+?数据库好?
- 大家快看:http://www.cnhonker.com/hack.html
关注
value is byte, -1 is invalid.
你使用一下定义的变量即可。
或者
project-->project options-->Compiler-->Code Generation-->去掉Optimization即可。
i,j,k,m,n:Integer;
过程中都没用到,应该在watch里看不到吧。
watch里的变量会自动保存的,只要你不删除,就会一直保留。
我知道用Fillchar并且没有出现问题,value is int64 ,-1有效!谢谢!
to Kingron & clacklin
其实我使用了我所定义的变量,要不我定义这么多干什么?只不过我没有贴出来!
project-->project options-->Compiler-->Code Generation-->去掉Optimization即可。
这个方法依然如此,还是xx:Variable 'xx' inaccessible here due to optimization
我想道理应该是对的!应该是被系统优化掉了!但是我还是不能看到?
watch里面变量,在我关闭了一个工程,再打开这个工程就没了!
或者关闭了Delphi,在打开也没了。但是有些在网上下载的程序中,可以见到他调试时,观察到的变量!请问具体在那里设置?附:我定义的变量,主要用于for循环或A数组下标!不知道是不是问题产生的原因!
有一定道理,但是我想我不是属于这种情况!
因为其他的变量我都可以看到!
再者我的调试一直在onClick中,变量应该没有离开范围!局部变量离开定义范围,调试窗口应该显示该变量没有定义才对吧!
不管你在什么时候引用,都看不到!不知道为什么!如果把他们全部定义成全局变量,就都可以了!
并且都付初值0,而局部变量为随机值!问一下,在delphi中的局部变量和Bpascal中的局部变量,有什么不同?
如:是否是在调用该函数时,分配空间………………我想应该是Delphi把它优化了,但是为什么呢?
还是局部变量在Delphi中定义,有所限制!?
使用一下变量可以,但是如果不使用的化,即便是去掉Optimizition也是会出现他所说的问题。
我可是用了该变量的,如果不是用Delphi不是会说'xx' never used……。
去掉Optimizition应该产生的效果是什么?
var
z,xx,yy:Integer;
i,j,k,m,n:Integer;
begin
// fillchar(A,sizeof(A),-1);//A是一个三维数组
k := 2 ;
ShowMessage(inttostr(k)) ;end;
这时就可以在Debug窗口中看到K的值了
在这个问题里,K可以用Watch+断点运行看到!
就算,把K改为xx,也不可能在我的程序中实现,监控因为xx用于循环!
而且复杂度为O(N^3).
谢谢!
但是我实实在在的使用了他!还有当我定义的全局变量时,可以Watch到!我想可能还是要从这个方面分析!
在delphi中的局部变量和Bpascal中的局部变量,有什么不同?
如:是否是在调用该函数时,分配空间………………
Delphi自动优化代码功能也是有限制的,她只会帮你优化局部变量。
我没用过Bpascal,但我想大概是Bpascal没有这样优化代码罢了。
Delphi函数局部变量是存放在栈中的(不包括类对象),类对象统统在堆中分配。
我是这样引用的
for k:=1 to 20 do
for n:=1 to 20-i+1 do begin
m:=n+k-1;
for x:=n to m-1 do
~~~就是此变量找不到!
…………
end;
不知道这样是不是等于没有用!
我是用了四年的Bp后,转向Windows编程用Delphi。
所以我确实不懂Delphi自动优化代码的原理!
Bpascal也确实没有Delphi这么优化代码!但是,如果我把变量都定义成全局变量(我现在就是这样做的)程序运行无误!
我再把变量定义成局部变量后,程序得不出正确答案。
你说这是Delphi代码优化的Bug,还是我的程序的Bug!
希望有人告诉delphi优化的原理,或介绍一本书,我自己看,好吗?
关于你说的“如果我把变量都定义成全局变量(我现在就是这样做的)程序运行无误...”我也遇到过的,当时我的过程长而复杂,且使用了数个过程内嵌函数,在主过程的某个 for语句 发现了类似的问题,我在CPU窗中观察到 i(for变量) 的值的确古怪,没办法(我不能向 Borland 求助),我用 while ... Inc(i) 来实现(因为我觉得是 for 将 i 优化时的问题,她用谋寄存器存放 i,而在循环中有众多的地方使用了该寄存器,so...。不好意思是我想当然的看法而已,见笑了),OK了;另一方法,将 for ... end 独立到另一函数去;还有就是你用的方法,只是我特讨厌临时外部变量 ;-)
如果果真这样,当然是Delphi编译器的 Bug 。但反观我那过于庞大、复杂而显混乱的过程,我倒觉得我应付大部分责任。
~~~~~~~~~~~~是指什么?那应该怎么办?我觉得我从dos环境的Bpascal做了四年,应该对过程的细分还是比较注意的,
应该不会造成庞大、复杂而混乱的情况!
四年前做的东西,我现在也不会花很多的时间就能读懂!(以前我还没有加注释的习惯)
是的,我同意你的说法!有人说是鸡?我看象兔,这个图标和什么有关!to everyone
如果你进来看过了,请给出你的看法!
procedure tform1.temp;
var
i:integer;
begin
i:=1;
caption:=inttostr(i);//这时i仍有效.
{...}//这以后就没用到i了,这时watch就看不到了。已被代码优化了。不再占用资源了。
end;
如果是这样能否从CPU的窗口中体现出来呢?
for i:=0 to iCount do .....;//iCount:=5
运行时却发现i是从5减少到0,让我无可奈何,不知从何说起!!!
可惜我的《Object Pascal》一书关于代码优化一章没有,不能解释我的问题?推荐一本书吧!
试过了,没用!确确实实是Delphi优化的结果。谁能推荐一本书呢?
如果你在某处看到此具体解答,请告诉我!