Sie sind hier: AMDiS > C-Macros zur Vereinfachung der ...

C-Macros zur Vereinfachung der Programmierung

Montag 31. Januar 2011 von
Simon Praetorius
Eigentlich eher in C-Programmen üblich, eignen sich Macros, um einige Programmieraufgaben zu beschleunigen und das wiederholte schreiben von langen Befehlen zu verhindern. Ein wichtiger Nachteil dieser Technik ist die schlechte Wartbarkeit des Codes. durch ein Macro wird eine Zeichenkette vor dem Kompiliervorgang durch einen vorher difinierten Befehl im Quelltext ersetzt. Diese Ersetzung erfolgt ohne Prüfung von Datentypen und Syntaxveränderungen und kann somit auch zu ungewollten und schwer zu entdeckenden Fehlern führen. Nichtsdedtotrotz werden einige Macros in AMDiS definiert und können bei richtigem Einsatz die Arbeit sehr erleichtern. Einen kurzen (vermutlich unvollständigen) Überblick findet sich in der folgenden Liste

FUNCNAME(name)
setzt für die aktuelle Methode einen Funktionsnamen, der dann zusammen mit Zeilennummer und Dateiname, bei Fehlermeldungen ausgegeben wird. Beispiel: FUNCNAME("main")

ERROR(msg)
gibt eine Fehlermeldung aus. Wichtig: Text sollte mit "\n" abgeschlossen werden, damit nachfolgende Meldungen in der nächsten Zeilen beginnen können. Die Fehlermeldung wird in den error-stream geschrieben. Beispiel: ERROR("Division durch 0 nicht zulässig!\n")

ERROR_EXIT(msg)
wie ERROR(...), nach Ausgabe der Meldung wird Programm beendet.

WARNING(msg)
gibt eine Warnmeldung aus. Die Warnmeldung wird in den standard Ausgabe-stream geschrieben. Beispiel: WARNING("Gewählter Zeitschritt tau=%f ist sehr groß und kann auf instabiles Verhalten führen.\n",tau)

TEST(bedingung)(msg)
wenn bedingung==false wird msg als Fehlermeldung (siehe ERROR) ausgegeben. Beispiel: TEST(abs(nenner)>1.e-16)("Division durch (fast) 0 nicht zulässig!\n")

TEST_EXIT(bedingung)(msg)
wie TEST, es wird aber ERROR_EXIT ausgeführt, also das Programm bei Ausgabe beendet.

MSG(msg)
Ausgabe einer Meldung im standard Ausgabe-stream. Beispiel: MSG("Toleranz tol=%e wurde in Iteration %d unterschritten.\n", tol, iterationNr)

INFO(info,noinfo)(msg)
entpricht MSG, wenn für die ganzzahligen Parameter gilt: info>=noinfo. Beispiel: INFO(info,2)("Start des Lösungsprozesses...\n"), wobei info eine Variable ist.

WAIT
unterbricht die Programmausführung bis 'Enter' betätigt wurde. Das Programm wird allerdings nur unterbrochen, wenn in der Parameter-Datei 'Wait: 1' gesetzt wurde.

WAIT_REALLY
wie WAIT, aber ohne Beschränkung durch Parameter-Datei
Besucher: 5640 | Permalink | Kategorie: AMDiS
Tags: ,
Kommentar hinzufügen