【发布时间】:2011-08-11 20:46:40
【问题描述】:
当我编译这段代码时
{$WARNINGS ON}
function Test(s: string): string;
var
t: string;
d: double;
begin
if s = '' then begin
t := 'abc';
d := 1;
end;
Result := t + FloatToStr(d);
end;
我收到警告“变量 'd' 可能尚未初始化”,但我没有收到关于变量 't' 的相同警告。这似乎不一致。此代码只是显示编译器警告的一个简单示例,但我刚刚在我的实时代码中发现了一个错误,该错误可能会被未初始化字符串变量的编译时警告捕获。我可以在 Delphi 6 中以某种方式打开此警告吗?还是在较新版本的 Delphi 中?
【问题讨论】:
-
我非常怀疑现在的代码是否会编译。您在“t:= 'abc'”之前缺少一个“开始”。
-
糟糕,错字已更正:) 我将其输入 SO 而不是复制和粘贴。
-
@soid ...如果变量 s 不是空字符串,那么您将遇到该代码的问题,因为 FloatToString(d) 可能会爆炸 - 就像警告所说的 d 可能尚未初始化。您可能会在其他地方给它一个值,但鉴于发布的内容,我会将“d := 1”移到“开始”之后。或者,我会在开始之后放置“d := 0”,然后在 if 语句中将其设置为 1(如果需要的话)。在您清除所有警告之前,您的代码是不完整的。
-
@TDelphiHobbyist 您是否阅读了问题和代码?!!
-
@TDelphiHobbyist:问题的重点在于简单类型会收到警告,但字符串不会。作为人为示例的示例代码如果以保证
d被初始化的方式编写将毫无意义!
标签: delphi compiler-warnings initialization