Jus*_*ase -3 delphi variables default
我的公司使用Delphi已有数十年了,我们的核心程序是一个很旧的版本。它有大约130万行代码。
升级到Delphi 10 Rio后,出现了一个主要问题。我们的局部函数变量曾经使用默认值进行初始化(整数将为0,布尔值将为false),似乎不再是。现在我所有的变量在创建时都会获得一个随机值,因此整数的值类似于408796。
我想这不是新开发的问题,但是我相信您可以在我们的大型代码库中看到此问题。我们从来没有手动将默认值分配给这些变量,因为它可以正常工作。但是,对象变量始终存在此问题。所有属性均获得随机值,因此我们在进行处理时对此进行了改进。但是现在我们的程序完全中断了,因为所有计数器等都是从高值开始而不是从0开始。并且要遍历整个项目来解决这个问题,将需要几个月的时间。
也许有编译器选项可以更改此设置?倒退的是,他们会故意更改此设置,因为这样做很愚蠢。为什么要删除所有开发人员期望的功能?实际上,我原本希望这样做,否则对象变量将不再需要手动的默认值,并且可能实现了垃圾回收器。但是看来德尔福已经严重退步了吗?
如果有解决此问题的方法,请告诉我。
非托管类型的局部变量(例如整数和布尔值)从未自动初始化。如果您有依赖于此的代码,则该代码始终被破坏。如果您的程序没有受到影响,那就是偶然的,而不是计划的。如果启用了编译器提示和警告,编译器会告诉您这一点。
所有托管类型的变量都是默认初始化的。所有全局变量都是默认初始化的。所有类成员字段都是默认初始化的。它只是非托管类型的局部变量,并且动态分配的内存GetMem没有默认初始化。
前进的唯一途径是修复代码,以确保变量已初始化。使用编译器提示和警告为您提供帮助。
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |