![]() |
Makro-Ersatz
Hi,
wie kann ich ungefähr sowas realisieren, wo Delphi ja keine Makros kennt (ohne einen Präprozessor zu benutzen):
Delphi-Quellcode:
procedure foo;
var bar: Integer; procedure foo2; inline; begin inc(bar); end; begin ... foo2; ... end; Zitat:
Gibt es also eine bessere Lösung als direkt inc(bar) reinzuschreiben oder nicht-inline-procs? Mfg FAlter |
Re: Makro-Ersatz
Ich würde erstmal bei Codegear einen enhancement-request im QC eintragen das solche Konstrukte auch als inline möglich wären. Ich würde einfach sagen das hier der Compiler einfach zu vorsichtig arbeitet.
|
Re: Makro-Ersatz
funktioniert INLINE überhaupt wieder?
Zitat:
nja, jedenfalls ohne das inline kann ich es porblemlos kompilieren/verwenden. |
Re: Makro-Ersatz
Hi,
sowas steht in der Hilfe zu TurboDelphi nicht drin, im Gegenteil lässt sich herauslesen, dass es durchaus eine Funktion hat: Zitat:
Zitat:
[edit] Die CPU-Ansicht sagt:
Code:
Klappt also offensichtlich nicht.
...
FooBar.pas.345: foo2; ... 00477F0E E809FFFFFF call foo2; ... [/edit] Mfg FAlter |
Re: Makro-Ersatz
Hallo himitsu,
Zitat:
Zu Turbo-Pascal-Zeiten wurde das Schlüsselwort "INLINE" anfangs benötigt, um Maschinencode direkt in das Compilat einzuflechten. Einen eingebauten Assembler brachte erst Turbo Pascal 6.0 mit, wenn ich mich richtig erinnere. Der von dir zitierte Ausschnit aus der Online-Hilfe bezieht sich wohl auf diese ursprüngliche Verwendung. Gruß Hawkeye |
Re: Makro-Ersatz
Hi,
ich habe mich jetzt erstmal entschieden, foo2 auszukommentieren und weiter unten inc(bar){foo2} zu schreiben. Dann weiß ich erstmal, dass mit inc(bar) foo2 gemeint ist, und es hat den gewünschten Effekt, nämlich, dass nicht der Prozeduraufruf, sondern deren Code eingebaut wird. Schade, dass es nicht noch schöner geht (außer mit nem Präprozessor, aber TurboDelphi und IDE-Erweiterungen...). Mfg FAlter |
Re: Makro-Ersatz
OK schön, dann geht dat ja wieder ^^
hast du es schonmal mit Assembler versucht?
Delphi-Quellcode:
procedure foo2; inline;
asm inc &bar end; @Hawkeye219 ich weiß, und das von dir zitierte INLINE funktioniert auch immernoch ... zumintestens in etwa :stupid:
Delphi-Quellcode:
für Pascalcode:
{$L Dateiname}
{$LINK Dateiname}
Delphi-Quellcode:
aber ich bezog mich auf die Compilierdirektiven für Funktionen/Prozeduren
{$I Dateiname}
{$INCLUDE Dateiname} INLINE sagte (und sagt jetzt wieder), daß der Funktions-/Prozedurinhalt in den aufrufenden Code direkt eingebunden werden soll. Nja und ASSEMBLER sagte dem Kompiler, daß er gleich eine ASM-Funktion vorfindet (find ich irgendwie sinnlos, weil das sollte der ja och so sehn, aber was solls) |
Re: Makro-Ersatz
Hi,
laut OH vertragen sich inline und Assembler nicht. Auch bei Auto wird laut CPU-Fenster immer noch ein call ausgeführt. Mfg FAlter |
Re: Makro-Ersatz
Zitat:
Un da es nicht geht wenn du explizit INLINE befiehlst, dann war's ja wohl klar daß die Automatik das auch nicht hinbekomm ._. |
Re: Makro-Ersatz
Wieso lässt du das 'inline' nicht einfach weg? Ich verwende lokale Prozeduren und Funktionen zuhauf. Es erhöht die Übersichtlichkeit enorm (wenn man es nicht übertreibt). Mir persönlich ist es fast immer egal, wenn dadurch ein paar Nanosekunden flöten gehen. Wichtiger sind Eigenschaften wie Übersichtlichkeit, Lesbarkeit, Wartbarkeit.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz