Tutorial
Const vs. #define
von ytwinky | Seite 2 von 3 |
Ich möchte mein Programm aber nicht durch Konstanten aufblähen, ich benutze lieber #define..
#define e Exp(1.0)
Dim EulerscherString As String="Eulersche Zahl=" &Exp(1.0)
Dim EulerscheZahl As Double=e
Print EulerscherString &!"\nEulersche Zahl=" &e
Sleep
könnte das erledigen..
Durch die #define-Anweisung wird bei der Übersetzung überall dort das Exp(1.0) eingefügt, wo es nötig ist!
Fassen wir mal kurz zusammen:
-das Kürzel 'e' steht jetzt für 'Exp(1.0)'
-der Compiler ersetzt vor dem Übersetzen das Kürzel 'e' durch 'Exp(1.0)' (..und auch wirklich nur in dem Zusammenhang)
Ja, und dann? Dann folgt der Übersetzungsvorgang, in dem jedes Auftauchen von 'Exp(1.0)' in die 'zeitraubende' Double-Berechnung übersetzt wird XD
Wenn wir jetzt den Ausgang des Kampfes "Const vs. #define" bewerten wollen, stellen wir fest:
Sieger nach Taktzyklen ist: Const
Wie erwähnt, ist es nur nötig, die Berechnung EINMAL durchzuführen, während bei #define JEDESMAL die Berechnung durchgeführt wird!
Das gilt aber nur für die hier betrachtete Verwendungsweise von Const und #define, sollte aber nicht unbeachtet bleiben, wenn es darum geht, z.B. Schleifen zu optimieren ;-))
Die versteckte Double-Berechnung per #define wird hier nämlich leicht übersehen..
Ganz außer Konkurrenz gibt es aber auch noch die Möglichkeit, Konstanten per Function zu berechnen:
Declare Function Pi As Double
Declare Function e As Double
Function Pi As Double
Return 4.0*Atn(1.0)
End Function
Function e As Double
Return Exp(1.0)
End Function
Auch hier kann der Wert nicht verändert werden! Allerdings muß er bei jedem Aufruf berechnet werden..
Bei JEDEM Aufruf? Nicht bei jedem Aufruf, aber zumindest beim ersten Mal:
Declare Function Pi As Double
Declare Function e As Double
Function Pi As Double
Static As Double PiSub=4.0*Atn(1.0)
Return PiSub
End Function
Function e As Double
Static As Double eSub=Exp(1.0)
Return eSub
End Function
Durch das Schlüsselwort 'STATIC' bleibt der berechnete Wert erhalten.
Der stets aufmerksame Forensuchdienst( http://volta.de.tt ) hat Fehler in den Beispielcodes entdeckt(doch sie sind schon berichtigt)..
Und nicht nur das, aus ungewöhnlich gut unterrichteter Quelle sind Forschungsunterlagen der volta-Labs aufgetaucht..
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|