Seite 1 von 2

Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 19:07
von vocalid
Bin gerade am Coden und habe diese Möglichkeit gefunden um Labels in Makros verwenden zu können >:)

Code: Alles auswählen

Macro jump(a,b,label)
  Goto label#1:
  Debug a
  Goto label#2:
label#1:
  Debug b
label#2:
EndMacro

r=3
s=4

jump(r,s,jumphere)
jump(r,s,jumpthere)  
Macros sind 'ne tolle Sache :praise:

...und Hallo an alle :bounce:

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 19:30
von STARGÅTE
Na ich weiß nicht so recht, du musst dir ja totzdem bei jedem Aufruf einen neuen Label-Präfix ausdenken ...
Nicht alles muss im Macro besser sein als in einer Procedure.

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 19:40
von Nino
STARGÅTE hat geschrieben:Na ich weiß nicht so recht, du musst dir ja totzdem bei jedem Aufruf einen neuen Label-Präfix ausdenken ...
Jep. Richtig nützlich wäre sowas, wenn das nicht nötig wäre.
Außerdem ist das Beispiel ziemlich sinnfrei, das macht nämlich nichts anderes als Debug b. :D

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 19:58
von vocalid
Nino hat geschrieben:
STARGÅTE hat geschrieben:Na ich weiß nicht so recht, du musst dir ja totzdem bei jedem Aufruf einen neuen Label-Präfix ausdenken ...
Jep. Richtig nützlich wäre sowas, wenn das nicht nötig wäre.
Außerdem ist das Beispiel ziemlich sinnfrei, das macht nämlich nichts anderes als Debug b. :D
klar ist es sinnfrei... aber es geht um's Prinzip :wink:

Macro ist sehr sehr vorteilhaft für die letzten Microsekunden herauszukitzeln, Prozedurenaufruf ist viel zu lahm....

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 20:00
von ts-soft
vocalid hat geschrieben:Prozedurenaufruf ist viel zu lahm....
Naja, aber in jedem Falle schneller, als Du es wahrnehmen kannst :mrgreen:

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 20:10
von Nino
vocalid hat geschrieben:klar ist es sinnfrei... aber es geht um's Prinzip :wink:
Dass man in der "Tipps & Tricks"-Abteilung sinnfreie Beispiele postet ist alles andere als klar.
Das Beispiel zeigt nicht, warum diese Art des Springens zu einem Label einen Vorteil gegenüber dem Springen ohne Macro hat. Wenn es einen solchen Vorteil gibt, sollte man den auch demonstrieren (können).

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 23:16
von vocalid
Mensch könnt Ihr einem die Lust am Posten nehmen!

....Es wurde (Vielleicht wars im englischen Forum) nach einer Möglichkeit gesucht Labels in Makros welche im Programm mehrfach verwendet werden einzusetzen. Dies ist der Weg.

Und jetzt könnt Ihr mich so ziemlich, unfreundlicher Haufen.

PS. wenn ich bei einer App pro Sekunde 1'000'000 ein Makro oder 1'000'000 eine Procedur aufrufe, macht sehr wohl einen bemerkbaren Zeitunterschied aus.


......wie löscht man sich?

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 23:40
von ts-soft
Warum bist Du beleidigt, Dein Code macht nichts sinnvolles, jedenfalls kann ich das nicht erkennen.
Es wird immer derselbe Label, der sich innerhalb des Macros befinden muss, angesprungen :freak:

Geschwindigkeitsvorteil ist in einer realen Anwendung meist auch nicht vorhanden, weil so oft wird
eine Funktion nur selten in einer Schleife angesprungen und wenn, dann kann man dies meist besser
und vor allem leserlicher optimieren.

Re: Kleiner Macro-Label Trick...

Verfasst: 25.05.2012 23:59
von vocalid
Sorry wegen dem beleidigt sein.... hatte nen richtig üblen Tag.....

Es ist ohne den kleinen Trick unmöglich in Makros Labels einzubauen weil sonst ein Error wegen 2-fach oder mehr gleiche Labels....

Ich bin gerade daran eine kleine Stringsuchroutine zu schreiben, in Tests habe durchaus wegen solchen kleinen Tricks einen grossen Zeitvorteil

Re: Kleiner Macro-Label Trick...

Verfasst: 26.05.2012 02:15
von STARGÅTE
vocalid hat geschrieben:PS. wenn ich bei einer App pro Sekunde 1'000'000 ein Makro oder 1'000'000 eine Procedur aufrufe, macht sehr wohl einen bemerkbaren Zeitunterschied aus.
Erstens: Ein Macro wird nicht "aufgerufen", da es zu Kompilerzeiten einfach ersetzt wird.
Zweitens: Ein Prozeduraufruf (ohne komplexe Parameter definitionen) kostet gerade mal 1-3 Taktzyklen. Also nicht bemerkbar gegenüber sachen wie Sin(Winkel) [200 Taktzyklen] oder den Stringfunktionen die auch locker (einzeln) über 100 Taktzyklen verbrauchen.
vocalid hat geschrieben:Es ist ohne den kleinen Trick unmöglich in Makros Labels einzubauen weil sonst ein Error wegen 2-fach oder mehr gleiche Labels....
Das ist richtig. Allerdings bezweifel ich die Notwendigkeit von Goto im allgemeinen und sowieso innerhalb von Macros.
vocalid hat geschrieben:Ich bin gerade daran eine kleine Stringsuchroutine zu schreiben, in Tests habe durchaus wegen solchen kleinen Tricks einen grossen Zeitvorteil
Das liegt vermutlich daran, dass du vorher (bei einem Prozeduraufruf) den String immer als Kopie übergeben hast, was natürlich langsammer ist.
In einer Macro-Version wird der String ja direkt benutzt (was nicht immer erwünscht ist).
Allerdings erreichst du den gleichen Geschwindigkeitsvorteil von deinem Macro auch bei einer Procedure, wenn du einfach die Strings als Pointer übergibst, wenn du eh nur in ihnen "suchen" willst.

(Wir sind hier bei Tips und Tricks, daher solltest du diese Antwort auch als Tip verstehen und nicht als "gemecker")