Seite 2 von 2

Verfasst: 11.11.2007 13:52
von AND51
Macros wernden vom Compilr vor dem Kompilieren durch ihren Inhalt ersetzt. Den Satz würde ich als Anfänger (nicht böse gemeint!) selbst nicht verstehen, also erklär ichs dir mal. <)

Prozeduren:
Eine Prozedur ist eine Möglichkeit, oft benutze Routinen zu bündeln und als Prozedur abzuspeichern. So kannst du bequem den Befehl aufrufen und immer wird diese Routine ausgeführt. Spart Tipparbeit und hat noch einige programmtechnische Vorteile.

Macros:
Macros sind (nur) dazu da, Tipparbeit zu sparen. Sie sind nicht als Prozedur zu verstehen, denn Prozeduren haben z. B. einen eigenen Namensraum (Variablen, die Protected sind). So kann es in einer Prozedur eine Variable 'a' geben, obwohl es diese Variable bereits Global im Hauptprogramm gibt. Bei Macros dagegen wird der Inhalt eines Macros ja an jeder Stelle im Code eingesetzt, an der er aufgerufen wird:

Code: Alles auswählen

Macro zufall(min, max)
	(Random(max+min)-min)
EndMacro


Debug zufall(1, 10)

For n=1 To 5
	hallo=hallo+zufall(7, 21)
	Debug hallo
Next

Debug zufall(1, 100)*(zufall(0, 1)+zufall(0, 1))+1000-500+250-750
Du schreibst also an jeder Stelle bequem "zufall()" und der Compiler erweitert den Code. Für den Compiler sieht der Code im Endeffekt so aus, bevor er ihn kompiliert:

Code: Alles auswählen

Macro zufall(min, max)
	(Random(max+min)-min)
EndMacro


Debug (Random(10+1)-1)

For n=1 To 5
	hallo=hallo+(Random(21+7)-7)
	Debug hallo
Next

Debug (Random(100+1)-1)*(Random(1+0)-0)+(Random(1+0)-0))+1000-500+250-750
OK, das ist kein wletbewegendes Beispiel, ein besseres fällt mir aber gerade nicht ein.


Dadurch, dass Makros im Code eingesetzt werden, wird der Code schneller ausgeführt, denn der Computer muss hinterher bei der Ausführung eines Programms nicht erst an die Stelle im Programm springen, wo die Prozedur steht.

Macros werden wie Prozeduren deklariert, sie können sogar keinen Parameter haben und das sieht dann so aus:

Code: Alles auswählen

Macro parameterlos
   Debug "ja, was soll ich denn hier?"
EndMacro

parameterlos
parameterlos

Mit Macros kannst du PureBasic theoretisch sogar auf Deutsch übersetzen:

Code: Alles auswählen

Macro Wenn
If
EndMacro
Macro Ansonsten
Else
EndMacro
Macro EndeWenn
EndIf
EndMacro
Macro und
And
EndMacro


a=6
Wenn a=5 und 1=1
	Debug "a ist gleich 5"
Ansonsten
	Debug "a ist <> 5"
EndeWenn
Klick hier, um den Thread zu sehen, in dem ich PureBasic mal auf Deutsch "übersetzt" habe... :lol: [/url]

Verfasst: 11.11.2007 14:29
von Milchshake
Danke, wegen deinem Letzten Beispiel (Also das Mit deutsch übersetzten)
habe ich es auch jetzt entgültig kapiert ;)

Und ich empfinde es nicht als Schimpfwort, wenn du mich anfänger nennt, stimmt ja ^^

Verfasst: 11.11.2007 22:34
von AND51
> Also das Mit deutsch übersetzten
Wie gesagt, das ist nur rein theoretisch. Würde man das wirklich umsetzen, dürfte das ziemlich kniffelig werden.
Mir war damals nur Langweilig. Jemand hat mal ins Forum geschrieben, er hätte "DönerBasic" erfunden, PB Syntax, nur halt leicht verändert mit "ausländischem Dialekt". Fand ich ganz lustig. Und ich war halt dann der erste, der sowas dank macros "realisiert hat".

> Und ich empfinde es nicht als Schimpfwort, wenn du mich anfänger nennt, stimmt ja
Nun, von einigen klingt es eingebildet, wie sie sich selbst einschätzen. Tafkadasom2k5 findet es amüsant, wie ich mich selbst einschätze und bezeichne. <)

Und dich würde ich eigentlich schon als "fortgeschrittenen Anfänger" bezeichnen, denn "wirkliche" Anfänger wissen noch nicht unbedingt, was Macros sind, wie man Sprites clippt oder LinkedLists benutzt.