Mój kolega wpadł w stałą, która nagle zmieniła wartość;
okazało, był redeclared:Dlaczego kompilator Delphi nie ostrzega o zdefiniowanej na nowo stałej?
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;
To pokazuje 2
. Jeśli zamienisz kolejność jednostek w instrukcji Uses, wyświetli się 1
.
Dobrze, ale dlaczego kompilator Delphi nie ostrzega o duplikacie stałej nazwy (byłoby to bardzo pomocne)?
Czy jest coś, co mogę zrobić, aby włączyć ostrzeżenia (nie wygląda to w ten sposób).
Mogło, ale nie, myślę, że powinieneś zapytać na forach EMB, dlaczego nie jest to podniesienie czerwonej flagi ..., to samo dotyczy funkcji, klas, itp. – ComputerSaysNo
Dlaczego? Ponieważ może to być również wielki atut, aby móc zadeklarować symbol/typ o tej samej nazwie w innej jednostce i umieścić go bliżej zakresu stosowania jednostki niż jednostka, w której pierwotnie deklarowano symbol/typ. Na przykład klasy interposerów nie byłyby możliwe bez niego. –
@MarjanVenema prawda, jednak niektórzy ludzie woleliby być powiadamiani o tej sprawie zamiast polować na robaki ... – ComputerSaysNo