2012-05-30 22 views
5

Wenn ich Makros in meinem C-Code zu verwenden, wieWo werden Makros gespeichert?

#define var 10 

dann, wo genau die in dem für den Prozess vom Kernel zugewiesenen Speicherplatz gespeichert werden? In Heap oder BSS oder globalen Daten? Oder ist es nur ein Text-Ersatz für var in einem der Compiler-Pässe?

Antwort

14

Ja.
der letzte

nur ein Text Ersatz

Es durch einen Vorverarbeitung Durchlauf durchgeführt wird. Einige gute Details können here

+0

Ich glaube nicht, dass Textaustausch recht gerecht ist. Es kann mit Parameterlisten und dergleichen arbeiten. –

+0

Ja. Makros sind für viele Dinge nützlich. Der OP ist ein wenig unscharf über den CPP-Pass. Textersetzung ist was passiert. – EvilTeach

+0

@AndrewWhite: Der Präprozessor ist kompliziert, aber es macht nur eine Text-zu-Text-Konvertierung. Zum Beispiel ist es in Unix-Systemen möglich, den Präprozessor getrennt vom Compiler auszuführen, und Sie können sogar den C-Präprozessor für einige Nicht-C-Dateien verwenden. – hugomg

4

Präprozessordirektiven wie #define ersetzt werden mit dem entsprechenden Text während der Vorlaufphase der Erstellung und wird (fast) nie vertreten in den letzten ausführbaren gefunden werden.

0

Es ist eine Anweisung an den Compiler und wird daher in Tabellen im Compiler-Prozessraum gespeichert, nicht im Code-Bereich.

+0

Der Compiler sieht es nie. Der Präprozessor-Pass isst es. – EvilTeach

3

"Makros" sind eine "Kompilierzeit Sache".

Es "ersetzt" den Text, den der Compiler sieht - bevor er kompiliert wird.

Das Ergebnis (im kompilierten Code) kann eine Reihe von Operationen sein ... eine Datendeklaration ... oder gar nichts.

Aber das "Makro" selbst ist Alte Geschichte, nachdem der Präprozessor beendet ist, und bevor die Kompilierung tatsächlich beginnt.

0

Makros sind lediglich Textersatz. Wenn sie ersetzt werden, werden diese zu einem Teil des Codes und werden somit in CODE SEGMENT gespeichert.

Verwandte Themen