a := 5/0;
Der Ausdruck 5/0
ist, in der Fachsprache ausgedrückt, ein constant expression.
Ein konstanter Ausdruck ist ein Ausdruck, den der Compiler auswerten kann, ohne das Programm auszuführen, in dem er auftritt. Konstante Ausdrücke enthalten Ziffern; Zeichenketten; wahre Konstanten; Werte von aufgezählten Typen; die speziellen Konstanten Wahr, Falsch und Null; und Ausdrücke, die ausschließlich aus diesen Elementen mit Operatoren, Typumwandlungen und Mengenkonstruktoren erstellt werden.
Als solche wird dieser Ausdruck vom Compiler ausgewertet und nicht zur Laufzeit. Ihre Auswertung wird also durch Kompilierzeitregeln bestimmt und kann nicht durch Runtime-Gleitkommaeinheit-Ausnahmemasken beeinflusst werden.
Und diese Regeln geben an, dass der positive Wert geteilt durch Null gleich +INF
ist, ein spezieller IEEE754-Wert. Wenn Sie den Ausdruck so ändern, dass er mindestens ein Argument enthält, das kein Konstantenausdruck ist, wird er zur Laufzeit ausgewertet, und es wird eine Division durch Null-Ausnahme ausgelöst.
Bestätigt auf meiner Kopie von Berlin. Sieht so aus, als wäre es auch in Tokio: https://community.embarcadero.com/answers/divide-by-zero-different-in-rad-studio-10-2 –
@Jerry: Das liegt daran, dass der Ausdruck ein konstanter Ausdruck ist und zur Laufzeit nicht berechnet. Mindestens eine der beiden Zahlen (Dividend, Divisor) muss eine Variable sein, um eine Ausnahme auszulösen. –
Großartig! Compiler weiß, wie man durch 0 teilt :) – Victoria