2012-05-30 26 views
5

Jeśli używam makr w moim kodu C, takie jakGdzie są przechowywane makra?

#define var 10 

to gdzie dokładnie są przechowywane w przestrzeni przeznaczonej do procesu przez jądro? W sterty lub BSS lub danych globalnych? Czy jest to tylko zamiennik tekstu dla var w jednym z przejść kompilatora?

Odpowiedz

14

Tak.
ostatni

tylko wymiana tekst

wykonywana jest przez przepustkę przeróbki. Kilka dobrych informacji można znaleźć here

+0

Nie sądzę, aby zastąpienie tekstu było całkiem sprawiedliwe. Może pracować z listami parametrów i takimi. –

+0

Tak. Makra są przydatne dla wielu rzeczy. Op jest nieco rozmyta na temat przepustki cPP. Zastępuje tekst. – EvilTeach

+0

@AndrewWhite: Preprocesor jest skomplikowany, ale wciąż po prostu konwertuje tekst na tekst. Na przykład, w systemach uniksowych możliwe jest uruchamianie preprocesora oddzielnie od kompilatora, a nawet niektóre z plików innych niż C można używać preprocesora C. – hugomg

4

dyrektyw preprocesora jak #define otrzymują z odpowiednim tekstem na etapie przeróbki kompilacji i są (prawie) nigdy nie reprezentował w końcowej wykonywalnego.

0

Jest to instrukcja dla kompilatora, a zatem jest przechowywana w tabelach w przestrzeni procesowej kompilatora, a nie w przestrzeni kodu.

+0

Kompilator nigdy go nie widzi. Przejście preprocesora je. – EvilTeach

3

"Makra" to "kompilacja".

Po prostu "zamienia tekst", który kompilator widzi - zanim się skompiluje.

Rezultatem (w skompilowanym kodzie) może być zestaw operacji ... deklaracja danych ... lub nic.

Ale samo "makro" to historia starożytna po zakończeniu preprocesora, a przed rozpoczęciem kompilacji.

0

Makra to jedynie zamienniki tekstu. Po podstawieniu stają się one częścią kodu, a zatem są przechowywane w SEGMENTIE KODU.

Powiązane problemy