Un mio collega urtò una costante che improvvisamente aveva "cambiato valore";
scoperto, è stato dichiarato nuovamente:Perché il compilatore Delphi non avvisa per una costante ridefinita?
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;
Questo dimostra 2
. Se si scambia l'ordine dell'unità nell'istruzione Usi, viene visualizzato 1
.
Fine, ma perché il compilatore Delphi non avvisa del nome costante duplicato (Sarebbe molto utile)?
C'è qualcosa che posso fare per abilitare gli avvertimenti (non sembra in questo modo).
ma non è così, suppongo che dovresti chiedere ai forum EMB perché questo non sta alzando una bandiera rossa ..., lo stesso vale per le funzioni, le classi, ecc. – ComputerSaysNo
Perché? Perché può anche essere una grande risorsa per poter dichiarare un simbolo/tipo con lo stesso nome in un'unità diversa e metterlo più vicino all'oggetto dell'unità in uso rispetto all'unità in cui il simbolo/tipo è stato originariamente dichiarato. Le classi di Interposer, ad esempio, non sarebbero possibili senza di essa. –
@MarjanVenema true, tuttavia, alcune persone preferirebbero essere avvisate di questo caso invece di cacciare insetti ... – ComputerSaysNo