Buchempfehlung
MySQL kurz & gut
MySQL kurz & gut
Das preiswerte Taschen- buch stellt MySQL-rele- vante Inhalte systematisch und knapp dar, sodass es sich optimal zum Nach- schlagen beim Pro- grammieren eignet. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Const vs. #define

von RedakteurytwinkySeite 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..

 

Gehe zu Seite Gehe zu Seite  1  2  3  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 11.01.2008 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 27.08.2010 von Mitgliedfrebas gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen