9. Ausnahmen und Ausnahmebehandlung | ||||||
|
||||||
9.5 Das Pragma "Suppress"
Für alle Anweisungen, Ausdrücke oder Deklarationen, die eine Ausnahme auslösen können, finden zur Laufzeit Prüfungen statt. Diese senken die Ausführungsgeschwindigkeit des Programms. Um die Generierung von Laufzeitprüfungen zu unterdrücken, kann das Pragma "Suppress" verwendet werden, wobei angenommen wird, daß keine Laufzeitfehler mehr auftreten. Das Pragma "Suppress" kann sowohl programmweit als auch für einzelne Teile der Applikation eingesetzt werden und wird mit einem Prüfungsnamen aufgerufen. pragma Suppress (Prüfungsname [, [On =>] Programmelementname]); Das Pragma "Suppress" wird mit dem Namen einer Prüfung und evtl. mit den Namen der nicht zu prüfenden Datentypen, Variablen, Unterprogramme aufgerufen und unterdrückt die Generierung von Code zum Test dieser Prüfung; zum Beispiel verhindert das Pragma "Index_Check" die Prüfung eines Indizes auf Einhaltung der Bereichsgrenzen einer Reihung. Optional kann ein Bezeichner (Programmelementname) angegeben werden, wodurch die Unterdrückung der Prüfung nur für diesen Bezeichner abgeschaltet wird. Um alle Prüfungen abzuschalten, muß das Pragma mit dem Prüfungsnamen "All_Checks" aufgerufen werden: pragma Suppress (All_Checks); Das Pragma "Suppress" kann in jedem Deklarationsteil und jeder Spezifikation verwendet werden. Je nach Übersetzer kann ein Pragma auch als Übersetzeroption (configuration pragma) angegeben werden. Das Pragma "Suppress" sollte nicht dazu verwendet werden, vorhandene Laufzeitfehler zu ignorieren, da es der Implementierung des Übersetzers überlassen wird, diese Prüfung auch wirklich abzuschalten. Es wird nicht garantiert, daß nach Abschalten der Laufzeitprüfung wirklich keine Prüfung mehr stattfindet. Ein Programm, das durch die Unterdrückung vorhandener Laufzeitfehler scheinbar problemlos funktioniert, könnte bei Verwendung eines anderen Übersetzers Probleme verursachen. Die im Sprachstandard definierten und damit verwendbaren Prüfungsnamen lösen folgende Ausnahmen aus: Prüfungen, bei denen die Ausnahme Constraint_Error ausgelöst wird: Access_Check Prüfung, ob Zeiger bei Zeigerdereferenzierung null ist. Discriminant_Check Prüfung beim Zugriff auf Verbunde, ob die Diskriminante gültig ist. Division_Check Prüfung, ob bei "/", "rem" oder "mod" der Divisor 0 ist. Index_Check Prüfung der Grenzen beim Zugriff auf eine Reihung. Length_Check Längenvergleich von Reihungen bei Vergleich oder Konvertierung. Overflow_Check Prüfung, ob ein skalarer Wert innerhalb des Basisbereichs des Typs liegt. Range_Check Prüfung, ob ein skalarer Wert innerhalb des für diesen Untertyp gültigen Bereichs liegt. Tag_Check Prüfung der Untertypen von erweiterbaren Typen bei Zuweisung und Vergleich. Prüfungen, bei denen die Ausnahme Program_Error ausgelöst wird: Elaboration_Check Prüfung, ob ein Paketrumpf schon elaboriert wurde, wenn auf dessen Daten oder Unterprogramme zugegriffen wird. Accessibility_Check Prüfung, ob Objekte oder Unterprogramme zur Zeit des Zugriffs über Zeiger noch existieren. Prüfungen, bei denen die Ausnahme Storage_Error ausgelöst wird: Storage_Check Prüft, ob neim Aufruf eines Allokators genügend Speicher zur Verfügung steht. Beispiel mit Berücksichtigung des Pragmas "Suppress":
|
||||||
|