Kompilierzeitfehler und Laufzeitfehler

Fehler können beim Laden des Programms (sog. Kompilierzeitfehler) oder bei der Programmausführung (sog. Laufzeitfehler) auftreten. Glücklicherweise werden die meisten Fehler bereits bei der Kompilierung erkannt. Diese Erkennung umfasst fehlende Dateien, Syntaxfehler, Typfehler und unerwartete Bezeichner. Der Entwickler erhält sofort eine Rückmeldung, wenn er versucht, das Programm zu laden. Auf diese Weise wird ein Teil der unerwarteten Ausfälle während der Bearbeitung vermieden.

Es gibt jedoch auch Fehler, die aufgrund ihrer Natur nicht zur Kompilierzeit erkannt werden können. Dazu gehört zum Beispiel eine Division durch Null, da der Divisor dynamisch berechnet werden kann. Wenn ein Laufzeitfehler auftritt, wird der Interpreter sicher gestoppt und eine Fehlermeldung ausgegeben. Eine Laufzeit-Fehlermeldung ist ähnlich wie eine Kompilierzeit-Fehlermeldung. Er enthält sogar einen Verweis auf den entsprechenden Quellcode.

Beispiel:

Im folgenden Beispiel enthält die FOR-Schleife eine Division von 10 durch die Schleifenvariable i. Da die Variable i von -3 nach 3 iteriert wird, führt dieses Programm bei der 4. Iteration zu einem Fehler, wenn i den Wert 0 hat. Dieser Fehler wird zur Laufzeit erkannt und hält den Interpreter an. Es wird die unten stehende Fehlermeldung angezeigt. Er zeigt genau auf den Code '10/i' im Beispiel.

FILE aaa.nc:

{
VAR
    i, j : int;
END_VAR

FOR i := -3 TO 3 DO
    j := j + 10/i;
END_FOR;
}
M02

Fehlermeldung:

aaa.nc: 7.12-7.16: Division by zero

Beispiel:

Zur Laufzeit führt der Interpreter auch eine Überprüfung der Array-Grenzen durch. Folglich führen ungültige Indizes nicht zu unvorhersehbaren und in der Regel fatalen Abstürzen. Die Laufzeit-Fehlermeldung definiert genau Ort und Ursprung des Fehlers unter 'idx', meldet den fehlerhaft gelieferten Index (20) und den gültigen Indexbereich (10..19).

FILE aaa.nc:

{
VAR
    idx : INT;
    a : ARRAY [10..19] OF INT;
END_VAR

FOR idx := 10 TO 20 DO
    a[idx] := i;
END_FOR;
}
M02

Fehlermeldung:

aaa.nc: 8.5-8.8: Out of bounds. 20 exceeds range 10..19.