呵呵,意外发现这样的代码也能正确运行。

eastliangliang 2005-03-04 11:36:22
Delphi还真贴心啊,哈哈。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i := 4;
for i := 0 to i - 1 do
showmessage(inttostr(i));
end;
...全文
374 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
lw549 2005-03-07
  • 打赏
  • 举报
回复
回来晚了,循环中不用i,可以单步跟踪一下,发现i是从大到小执行的,和for的写法没有关系,原理上面已经说了。
>>for循环是事先确定循环次数的,你可以在调试的时候打开CPU看汇编,我说过,Delphi先把循环次数算出来放在寄存器ESI中,以后每次减1,不会再重新计算循环次数啦。
Sunniness 2005-03-05
  • 打赏
  • 举报
回复
呵呵,晕倒
caiso 2005-03-05
  • 打赏
  • 举报
回复
顶一下
eastliangliang 2005-03-05
  • 打赏
  • 举报
回复
for循环是事先确定循环次数的,你可以在调试的时候打开CPU看汇编,我说过,Delphi先把循环次数算出来放在寄存器ESI中,以后每次减1,不会再重新计算循环次数啦。
C语言是每次都计算循环条件的,不过它的for循环功能强大,这样做也是为了能实现其它循环的功能。
谁把C语言的for循环的反汇编代码贴出来,我机器上只有老式TC,还不太会使^_^
merkey2002 2005-03-05
  • 打赏
  • 举报
回复
Delphi还真贴心啊,哈哈。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
i := 4;
for i := 0 to i - 1 do //这里的i-1 运算先于i:=0,而且for 循环事先确定循环次数,
//不像 while <条件> do 那样每次循环前要进行重新判断.因此这里i-1只执行了一次.
showmessage(inttostr(i));
end;

我分析的对不?
Breakc0de 2005-03-05
  • 打赏
  • 举报
回复
呵,也是啊。
才子鸣 2005-03-05
  • 打赏
  • 举报
回复
up
lushiyu0 2005-03-05
  • 打赏
  • 举报
回复
回复人: eastliangliang(青苹果) ( ) 信誉:137 2005-03-04 14:27:00 得分: 0


呵呵,C语言里可不是这样的。
i=4;
for(i=0;i<i-1;i++)//--------------老大,这行和上一行i=4 之间是不是有什么冲突?当染不能执行了!
printf("%d",i);
不执行循环的。

那孩子他爹,不用i有什么有意思的事啊?
for i := 0 to i - 1 do
showmessage('hello world');
打四个hello world,没什么啊。

这不能是bug,只是优化。


cangwu_lee 2005-03-05
  • 打赏
  • 举报
回复
语言的特点
eastliangliang 2005-03-05
  • 打赏
  • 举报
回复
呵呵,楼上想的太多啦,这点小事,不用想那么多大道理哈^_^
firstshine 2005-03-05
  • 打赏
  • 举报
回复
所以,谁都没有资格教训新手:我已经精通XXX......

写程序,就得学到老
lw549 2005-03-04
  • 打赏
  • 举报
回复
呵呵,如果不是ShowMessage用到了i,还有更有意思的事呢:)
试试看
hthunter 2005-03-04
  • 打赏
  • 举报
回复
我只要分……
ly_liuyang 2005-03-04
  • 打赏
  • 举报
回复
本来就是可以的

http://lysoft.7u7.net
DieGhost 2005-03-04
  • 打赏
  • 举报
回复
想想也是,自己原来都是多此一举了
lym_1978 2005-03-04
  • 打赏
  • 举报
回复
呵呵
gxgyj 2005-03-04
  • 打赏
  • 举报
回复
^_^
DieGhost 2005-03-04
  • 打赏
  • 举报
回复
昏倒
eastliangliang 2005-03-04
  • 打赏
  • 举报
回复
Delphi在循环开始把i+1算出来放在ESI中,以后就不用变量i了。我以前都是用两个变量完成这个循环功能,现在看真是多此一举啊。
XXSingle 2005-03-04
  • 打赏
  • 举报
回复
呵呵,平时都没注意喔
加载更多回复(17)
Windows7及vista系统可用,但需要去掉UAC,或者用管理员权限运行主程序。 如无意外,黑刀Dezender 5.0 三套解密内核版 将会是最终版本,除非新的解密内核出现,否则今后也将不再更新,也请勿再加本人QQ咨询任何关于Zend解密的问题!感谢各位黑刀爱好者关注,敬请期待本人其他作品。谢谢! 反馈问题情况汇总: 1、有很多朋友说下载了最新版还是解不出来,是因为他们把程序放在了桌面上或者Program Files目录下。大家一定要记得,不要把黑刀Dezender的主程序以及需要解密的PHP文件放置在目录名包含空格的目录内,比如桌面、Program Files目录等,除了目录名不能包含空格以外,也不能包含英文的句号,以免程序将目录当做文件来处理,造成无法解密的情况。还有一种可能性,是因为被加密了的PHP文件采用了最新版的Zend来进行的加密,所以黑刀Dezender解不出来。 2、解密出来的文件有“乱码”:这种情况通常是因为PHP程序在加密时采用了混淆函数,而所使用的函数又是Dezender无法识别的,所以在函数的部分变成了“乱码”。目前唯一的解决办法只能是更新自己的混淆函数库来尝试解密,别无他法。 3、网友“李向阳”问:“我解开的文件能读,但是有很多很基本的语法问题。不知道是怎么回事!” 对于这个典型问题,我只能回答说,解密出来的文件不可能百分百还原为原始未加密的文件的。在遇到需要手工去修复代码的情况时,就要求Dezender的使用者具备相应的PHP程序编写知识。如果不具备?自己找书找资料看。呵呵。 4、如果出现如下的错误提示:“无法判断程序输入点于动态链接库php5ts.dll上”说明dezender和原有的PHP环境冲突,可考虑卸载原有PHP环境,或安装虚拟机,在虚拟机上使用dezender。实在不行,换台电脑试试看吧。呵呵。虚拟机的下载地址:http://tmd.me/2008/read.php?5 重要声明:   黑刀Dezender本身只是个集成工具而已,主程序实际上只是用Delphi开发的GUI界面的外壳程序,核心的解密功能部分来自互联网上的收集整理,我所做的外壳编程,仅是在原有的各个解密内核版本Dezender的功能上,开发基于windows的用户界面,以便于使用者对原有类似“DOS”环境下的各种应用功能的Windows实现。   关于加密保护自己的PHP程序的问题:   类似微盾加密的、可以混淆函数和变量的加密方式,官方名字叫做“PHPlockit”,微盾的php加密专家也有类似的功能,但似乎会造成程序无法正确运行。目前在我没有开发新版的解密工具之前,据我所知除我之外能手工解密“类微盾加密混淆函数及变量”的人并不多,大家可以试试。其他比较安全的加密方式比如Ioncube等也可以使用,只是国内支持该加密方式的虚拟主机不多,如果是独立服务器,可以考虑采用。   而Zend的混淆函数也是至今无法完全突破的问题,大家在开发自己的PHP程序时,可以采用较长的自定义函数名和变量名,这样Dezender就无法正确的识别出明文来了,就算解密掉程序本身,因为函数和变量都已经被混淆,自然也很难让程序正确运行了。
程序无需使用命令方式进行解密,也无需任何配置即可使用。 Windows7及vista系统可用,但需要去掉UAC,或者用管理员权限运行主程序。 如无意外,黑刀Dezender 5.0 三套解密内核版 将会是最终版本,除非新的解密内核出现,否则今后也将不再更新,也请勿再加本人QQ咨询任何关于Zend解密的问题!感谢各位黑刀爱好者关注,敬请期待本人其他作品。谢谢! 反馈问题情况汇总: 1、有很多朋友说下载了最新版还是解不出来,是因为他们把程序放在了桌面上或者Program Files目录下。大家一定要记得,不要把黑刀Dezender的主程序以及需要解密的PHP文件放置在目录名包含空格的目录内,比如桌面、Program Files目录等,除了目录名不能包含空格以外,也不能包含英文的句号,以免程序将目录当做文件来处理,造成无法解密的情况。还有一种可能性,是因为被加密了的PHP文件采用了最新版的Zend来进行的加密,所以黑刀Dezender解不出来。 2、解密出来的文件有“乱码”:这种情况通常是因为PHP程序在加密时采用了混淆函数,而所使用的函数又是Dezender无法识别的,所以在函数的部分变成了“乱码”。目前唯一的解决办法只能是更新自己的混淆函数库来尝试解密,别无他法。 3、网友“李向阳”问:“我解开的文件能读,但是有很多很基本的语法问题。不知道是怎么回事!” 对于这个典型问题,我只能回答说,解密出来的文件不可能百分百还原为原始未加密的文件的。在遇到需要手工去修复代码的情况时,就要求Dezender的使用者具备相应的PHP程序编写知识。如果不具备?自己找书找资料看。呵呵。 4、如果出现如下的错误提示:“无法判断程序输入点于动态链接库php5ts.dll上”说明dezender和原有的PHP环境冲突,可考虑卸载原有PHP环境,或安装虚拟机,在虚拟机上使用dezender。实在不行,换台电脑试试看吧。呵呵。虚拟机的下载地址:http://tmd.me/2008/read.php?5 重要声明:   黑刀Dezender本身只是个集成工具而已,主程序实际上只是用Delphi开发的GUI界面的外壳程序,核心的解密功能部分来自互联网上的收集整理,我所做的外壳编程,仅是在原有的各个解密内核版本Dezender的功能上,开发基于windows的用户界面,以便于使用者对原有类似“DOS”环境下的各种应用功能的Windows实现。   我做这些解密程序本身也只是出于兴趣而作,就拿dezender来说,内核并不是我开发的,我也只是用Delphi写了外壳,让内核的使用更方便,微盾解密专家也是一样,享受的是用Delphi写程序时候的成就感和快乐。本身这两款程序也都是免费的,至多就是挂了个谷歌广告,只可惜从06年到现在,我的谷歌广告帐户也只积累了不到30美元而已。我深知不可能靠这些小东西赚钱发财,更是费力不讨好的事情。不过话说回来,dezender的外壳程序也不仅仅是我一个人在做,网上同类的、不同语言开发的外壳程序很多,只不过黑刀dezender做得更人性化一点,可操作的功能更完善一点罢了。而黑刀微盾解密专家更是在php版的解密脚本铺天盖地都有的情况下才写出来的,所实现的功能也与该解密脚本一致,并未提供更复杂的诸如函数和变量混淆的解密功能。 关于加密保护自己的PHP程序的问题:   类似微盾加密的、可以混淆函数和变量的加密方式,官方名字叫做“PHPlockit”,微盾的php加密专家也有类似的功能,但似乎会造成程序无法正确运行。目前在我没有开发新版的解密工具之前,据我所知除我之外能手工解密“类微盾加密混淆函数及变量”的人并不多,大家可以试试。其他比较安全的加密方式比如Ioncube等也可以使用,只是国内支持该加密方式的虚拟主机不多,如果是独立服务器,可以考虑采用。   而Zend的混淆函数也是至今无法完全突破的问题,大家在开发自己的PHP程序时,可以采用较长的自定义函数名和变量名,这样Dezender就无法正确的识别出明文来了,就算解密掉程序本身,因为函数和变量都已经被混淆,自然也很难让程序正确运行了。
 Python自动化运维开发现阶段,掌握一门开发语言已经成为高级运维工程师的必备计能。因为自动化运维才是将来的趋势! 现在,大一点的公司,服务器都上几百,上千,甚至数万台,这种情况下怎样做自动化运维?用 SHELL 写脚本 FOR 循环?呵呵,歇了吧,SHELL 也就适合简单的系统管理工作。到复杂的自动化任务还得要用专门的开发语言。你可能说了,自动化管理有专门的开源软件/监控也有,直接拿来用下就好了,但是现有的开源软件如 puppetsaltstackzabbixnagio 多为通用的软件,不可能完全适用你公司的所有需求,当你需要做定制、做二次开发的时候,你咋办?找开发部门?开发部门不懂运维的实际业务逻辑,写出来的东西烂烂不能用,这活最后还得交给运维开发人员来做。 其次,不会运维开发,你就不能自己写运维平台\复杂的运维工具,一切要借助于找一些开源软件拼拼凑凑,如果是这样,那就请不要抱怨你的工资低,你的工作不受重视了。 那为什么是Python?  Python 是个非常牛 B 的脚本语言, 能满足绝大部分自动化运维的需求,又能做后端 C/S 架构,又能用 WEB 框架快速开发出高大上的 WEB 界面,只有当你自已有能力做出一套运维自动化系统的时候,你的价值才体现出来,你才有资格跟老板谈重视, 否则,还是老老实实回去装机器吧。 为此我们推出这门Python自动化运维的系统课程,帮助你快速的掌握这门加薪的技能。这门课程目前已经帮助接近百位的linux工程师转型成功。我们的课程主要是以企业真实的项目实战为主,避免过多的理论,互动多,案例多,注重思想和项目架构的设计,小白很容易听的懂,学完能直接在公司用,非常的接地气! 只要你跟着我们学三个月,你就可以使用学到的技能,开发各种你想要的系统,满足公司的日常开发。讲师介绍凯哥,前新浪、360技术架构师,现任阿里天猫车站架构师。熟悉PHP、Python、Go等各种语言。曾主导新浪CMDB架构的设计以及二次重构,其间积累了大量的实战经验,并多次受邀对小微企业进行内训。  课程目标这门课程属于入门和进阶,适合多年linux运维经验或者有shell或者Python基础的同学学习。 1.希望转型运维开发的运维工程师2.希望了解运维开发,探寻运维架构的运维负责人3.希望获得全局思考意识的运维架构负责人 只要你跟着我们认真学,结合课程中的练习和项目进行实践,相信你一定能学以致用,3个月的时间打破瓶颈,成就自己!课程大纲介绍阶段章节核心内容7.实战项目之CMDB介绍和客户端数据的采集介绍自动化运维的介绍运维实际工作简单介绍什么是运维自动化CMDB在自动化运维中的重要性CMDB采集数据的三种方式CMDB实现的三种方案之Agent方式收集资产CMDB实现的三种方案之SSH类方式收集资产CMDB实现的三种方案之Saltstack方式收集资产CMDB实现各种方案的总结8.实战项目之CMDB客户端数据采集实战高内聚低耦合的思想实战CMDB收集资产之参考Django框架对配置文件的解耦CMDB收集资产之对资产采集进行可插拔式的配置CMDB收集资产之客户端功能的解耦数据提交API的验证CMDB收集资产之向API提交收集的资产CMDB收集资产之API的JWT验证问题CMDB收集资产之唯一ID选择问题CMDB收集资产之多线程并发采集9.实战项目之CMDB服务端数据的展示数据表的设计以及数据的入库CMDB后台目录结构的设计CMDB数据库表的设计将客户端提交过来的数据分析并入库用户和权限管理单个用户的增删改查操作用户组的的增删改查操作对用户和用户组进行权限管理硬盘和CPU的管理对资产硬盘的增删改查操作, 以及导出数据到PDF,Excel,CSV对资产CPU的增删改查操作, 以及导出数据到PDF,Excel,CSV            资产信息的可视化展示Highcharts的基本使用蚂蚁金服开源框架AntV的使用xadmin的基本使用和二次开发Echarts的基本使用

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧