Ich brauchte eine Weile um zu merken, dass der Delphi-Compiler mich
nicht warnt, wenn ich in einer Funktion den Rückgabewert nicht definiere und dieser ein Interface ist.
Warum ist das so?
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs;
type
IInterface =
interface ['
{3E4EDB7F-A266-48DE-8415-F73406A38C7C}']
end;
TForm1 =
class(TForm)
function testFunc(): IInterface;
function testFunc2(): TForm1;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
if testFunc() =
nil then ShowMessage('
nil');
if testFunc2() =
nil then ShowMessage('
nil');
end;
function TForm1.testFunc: IInterface;
begin
//
end;
function TForm1.testFunc2: TForm1;
begin
//
end;
end.
Der Compiler warnt nur
Code:
[DCC Warnung] Unit1.pas(41): W1035 Rückgabewert der Funktion 'TForm1.testFunc2' könnte undefiniert sein
Bein Ausführen bekomme ich sowohl
als auch
. Vor allem dass testFunc2() nil zurückgibt wundert mich. Ich hätte gedacht, es ist in der Funktion ein normaler Zeiger auf dem Stack der erst einmal nicht initialisiert wurde und dort erst einmal irgendetwas steht?