Für was Makros?
-
Ich bin gerade dabei einige Basics in Assembler zu erarbeit...
Ich frage mich nun, für was man eigentlich Makros definieren kann?
Anstelle des Makros wäre doch eine Prozedur eigentlich stehts besser, weil das Programm schlussendlich kleiner wird.
Evtl. wird der Code schneller, wenn statt dem Aufrufen einer Prozedur, der Code direkt mit einem Makro an die entsprechende Stelle kopiert wird?
Ist ein Makro also eine Art Entsprechung für inline in C++?P.S.: Gibt es für ASM eigentlich keine allgemein bekannte kostenlose IDE im Stile von z. B. Eclipse für Java?-Was verwendet ihr?
Bisher ist bei mir der Stand so, dass ich für's Erst halt einen eigenen Editor (IDE) geschrieben habe, um nicht mit diesen lästigen Batchskripten arbeiten zu müssen, wie's im Buch gemacht wird.
-
MOV Weltall,Abfall schrieb:
Ich frage mich nun, für was man eigentlich Makros definieren kann?
Aus dem selben Grund, aus dem du sie auch in Hochsprachen definieren kannst. su...
MOV Weltall,Abfall schrieb:
Anstelle des Makros wäre doch eine Prozedur eigentlich stehts besser, weil das Programm schlussendlich kleiner wird.
Nicht korrekt. 1., weil in optimiertem Code sich die Groesse des Programms oft proportional zur Geschwindigkeit verhaelt (ein Funktionsaufruf kostet einfach mehr Zeit als kurze Code-Teile direkt auszufuehren).
2. sind Makros viel flexibler als Funktionen.MOV Weltall,Abfall schrieb:
Evtl. wird der Code schneller, wenn statt dem Aufrufen einer Prozedur, der Code direkt mit einem Makro an die entsprechende Stelle kopiert wird?
Jup, wie gesagt.
Fuer kurze Codeabschnitte, die sich oft in geringer Variation wiederholen, zB. auch in zeitkritischen Bereichen, sind Macros eben eine feine Sache. Fuer laengere Programmteile wird man dann eher Prozeduren benutzen.
Es gibt eben fuer beides Anwendungsfaelle.MOV Weltall,Abfall schrieb:
Ist ein Makro also eine Art Entsprechung für inline in C++?
ka. Normalerweise werden Macros in c++ doch AFAIK auch ueber #define definiert.
MOV Weltall,Abfall schrieb:
P.S.: Gibt es für ASM eigentlich keine allgemein bekannte kostenlose IDE im Stile von z. B. Eclipse für Java?-Was verwendet ihr?
Noe. Ich benutze einfach das Windows notepad. Auch wenn es ein relativ schlechter Editor ist (Probleme mit verschiedenen Textformaten + langsam bei grossen Dateien), so ist er doch wenigstens angenehm schlank, was man zB. von Eclipse ja nun nicht gerade behaupten kann.
MOV Weltall,Abfall schrieb:
Bisher ist bei mir der Stand so, dass ich für's Erst halt einen eigenen Editor (IDE) geschrieben habe, um nicht mit diesen lästigen Batchskripten arbeiten zu müssen, wie's im Buch gemacht wird.
Ich finde das eigentlich ganz angenehm. Praktischer koennte es mir keine IDE machen. Fuer ein Projekt schreibe ich mir einmal ein kleines Batchskript zum Erstellen. Das Erstellen ist dann auch mit einem Klick (zum fokussieren des Explorer-Fensters) + Doppelklick (auf die Batch-Datei) erledigt.
-
Nobuo T schrieb:
MOV Weltall,Abfall schrieb:
Ist ein Makro also eine Art Entsprechung für inline in C++?
ka. Normalerweise werden Macros in c++ doch AFAIK auch ueber #define definiert.
In C gibt es (nur) #define, was in etwa euren Makros entspricht (wenn ich die Beiträge hier richtig deute). C++ hat #define (von C geerbt - ersetzt den "Aufruf" schon vor dem Compilieren durch den betroffenen Ersatztext) und inline-Funktionen (werden zunächst normal übersetzt und anschließend entscheidet der Compiler mit Blick auf Geschwindigkeit und Programmgröße, ob er den Aufruf als normalen Funktionsaufruf stehen lässt oder den Programmcode direkt einfügt).
-
c versteht sich auch mit inline :]. ich bin mir aber nicht sicher ob das ansi standard ist.
-
Das wäre auf jeden Fall nicht ANSI-C.
Du kannst (fast) jedes C-Programm auch fehlerfrei mit einem C++-Compiler übersetzen. Du hast bestimmt dein C-Programm mit einem C++-Compiler übersetzt und da ist es kein Wunder, wenn der inline kennt.
Danke für die Ausführungen an alle!
-
MOV Weltall,Abfall schrieb:
Das wäre auf jeden Fall nicht ANSI-C.
Du kannst (fast) jedes C-Programm auch fehlerfrei mit einem C++-Compiler übersetzen. Du hast bestimmt dein C-Programm mit einem C++-Compiler übersetzt und da ist es kein Wunder, wenn der inline kennt.
Danke für die Ausführungen an alle!
nein.
__inline
-
Wie MOV sagte, im Ansi-Standard (zumindest im ursprünglichen C98 - wie das bei C99 aussieht, weiß ich nicht genau) gab es kein inline. Aber das ist kein Hindernis für verschiedene Compiler-Hersteller, eigene Inline-Erweiterungen für C zu verwenden.
z.B. aus der MSDN:
inline
function_declarator; // C++ Specific__inline
function_declarator;// Microsoft Specific__forceinline
function_declarator;// Microsoft Specific[...]
The inline keyword is available only in C++. The __inline and __forceinline keywords are available in both C and C++. For compatibility with previous versions, _inline is a synonym for __inline.
-
Ich habe als SciTE benutzt, da hat man ein wenig Syntax-Highlighting, der Editor ist schön schlank und mit recht wenig Aufwand kann man ein kleines Skript per Tastendruck ausführen, dass das Programm assembliert und/oder aufruft.
Ich glaube man kann die Ausgabe(n) sogar in ein Fenster des Editors umleiten, allerdings habe ich mich damit nie näher befasst (Debugger-Support bietet SciTE afaik auch).
-
CStoll schrieb:
Wie MOV sagte, im Ansi-Standard (zumindest im ursprünglichen C98 - wie das bei C99 aussieht, weiß ich nicht genau) gab es kein inline. Aber das ist kein Hindernis für verschiedene Compiler-Hersteller, eigene Inline-Erweiterungen für C zu verwenden.
z.B. aus der MSDN:
inline
function_declarator; // C++ Specific__inline
function_declarator;// Microsoft Specific__forceinline
function_declarator;// Microsoft Specific[...]
The inline keyword is available only in C++. The __inline and __forceinline keywords are available in both C and C++. For compatibility with previous versions, _inline is a synonym for __inline.
ah danke. "microsoft spezifisch" erklärt dann alles. wobei gcc dies auch unterstützt. jetzt muss ich mal eben rausfinden welcher compiler dies zuerst unterstützt hat