Ich folgte nur ein Tutorial, das CPP-Makros zu implementieren, um ein Debug-System in einem Programm zu implementieren. Ein großes Verhalten der Makros wird rekursiv, so dass es möglich, ein Makro in einem anderen Makro zu setzen wie unten:C-Pre-Prozessor Makros Auftrag
#define MACRO1 "World"
#define MACRO2 printf("Hello %s\n",MACRO1);
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
MACRO2
return 0;
}
Ausgang: Hello World
Die unten scheint auch zu funktionieren:
#define MACRO2 printf("Hello %s\n",MACRO1);
#define MACRO1 "World"
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
MACRO2
return 0;
}
Also nur zu verstehen, liest CPP zuerst alle #define X
, um eine Liste der deklarierten Makros zu machen, um dann die Makros, die in anderen Makros sind, zu ersetzen, Vermeidung der "Huhn und Ei" Problem auf der Vorverarbeitung?
Ich denke, das macht Sinn, wenn man bedenkt, dass die Vorverarbeitung ein einmaliger Prozess ist (während der Kompilierung), der nicht in Echtzeit stattfindet. Es sollte also nicht darauf ankommen, wo im Code ein Makro definiert wurde, sondern ob es überhaupt definiert wurde.
Haben Sie einen Code mit 3000 Zeilen und nur in der letzten Zeile, die ein im Code verwendetes Makro definiert, wäre dann gültig?
Vielen Dank im Voraus!
Mögliches Duplikat von [Wie viele Durchläufe macht der C-Präprozessor?] (Http://stackoverflow.com/questions/13442028/how-many-passes-does-the-c-preprocessor-make) –