wie man die Quelle einiger Makros findet

Es gibt viele Stellen, an denen ein Makro definiert werden kann. Wenn das Makro in unserem eigenen Projekt von uns definiert wird, können Sie die Definitionsposition für sie leicht finden. Aber wenn ich versuche, ein berühmtes Open-Source-Projekt zu lernen, stört mich häufig die Frage: Wo finde ich die Quelle der Makros? Wenn ich die Definition nicht bekomme, verstehe ich einige von ihnen nicht (z. B. einige von ihnen) kann mit ihrem Namen erraten werden). Zum Beispiel eine Aussage von Apache:

#if defined(__osf__) && defined(__alpha),

#elif defined(__NSIG)

Meines Wissens nach gibt es einen möglichen Ursprungsort für ein Makro:

aus diesem Projekt selbst in einer Quelldatei (dies ist die einfachste, da wir sie mit einem Tool finden können)Aus einer Header-Datei einer 3rd-Lib können wir sie abrufenaus der c / c ++ Standard-Header-Datei (wo sind sie in Linux?)vom Betriebssystem (wo sind sie in Linux?)automatisch generiert vom configure tool (es ist bitter, ich habe keine ahnung)Vom Compiler-Tool wie gcc / g ++ oder im Makefile können wir einige Makros definieren

Ich habe einige Fragen zu konsultieren:

Wie können sie zwischen OS Defined und GCC / G ++ Defined unterschieden und toolgenerierte Makros konfigurieren? Haben sie jeweils eine Eigenschaft?Wie finde ich die Quelle derjenigen, die von OS oder von Standard-C oder Compiler definiert wurden? B. unter Verwendung vongrep oderfind DienstprogrammeWas bedeutet es, wenn ein Makro wie__strange___ kann nicht durch Kämmen der gesamten Maschine gefunden werden (cd /;grep __strange___ -r)?

Vielen Dank, dass Sie das Prinzip und die Methode genannt haben, um sie zu unterscheiden und die Quelle zu finden!

Antworten auf die Frage(8)

Ihre Antwort auf die Frage