Ein Kollege stieß auf eine Konstante, die plötzlich den Wert geändert hatte.
Es stellte sich heraus, war es neu deklariert:Warum warnt der Delphi-Compiler vor einer neu definierten Konstante?
unit Unit1;
interface
const
MyConstant = 1;
implementation
end.
-
unit Unit2;
interface
const
MyConstant = 2;
implementation
end.
-
Uses Unit1, Unit2;
// Uses Unit2, Unit1;
procedure TFrmRedefineConstant.FormShow(Sender: TObject);
begin
ShowMessage('MyConstant: ' + IntToStr(MyConstant));
end;
Dies zeigt 2
. Wenn Sie die Einheitenreihenfolge in der Uses-Anweisung tauschen, wird 1
angezeigt.
Fein, aber Warum warnt der Delphi-Compiler nicht über den doppelten Konstantennamen (Das wäre sehr hilfreich)?
Kann ich irgendetwas tun, um Warnungen zu aktivieren (sieht nicht so aus).
könnte es, aber es tut nicht, ich denke, Sie sollten auf EMB Foren fragen, warum dies nicht eine rote Fahne anhebt ..., das gleiche gilt für Funktionen, Klassen, etc. – ComputerSaysNo
Warum? Weil es auch ein großer Vorteil sein kann, ein Symbol/einen Typ mit dem gleichen Namen in einer anderen Einheit deklarieren zu können und dies näher in den Bereich für die verwendete Einheit zu bringen als die Einheit, in der das Symbol/der Typ ursprünglich deklariert ist. Interposer-Klassen zum Beispiel wären ohne sie nicht möglich. –
@MarjanVenema wahr, jedoch würden einige Leute lieber über diesen Fall benachrichtigt werden, statt auf Bugs zu jagen ... – ComputerSaysNo