jak znaleźć źródło niektórych makr

Istnieje wiele miejsc do definiowania makra. Gdy makro jest zdefiniowane w naszym projekcie przez nas, łatwo jest znaleźć dla nich pozycję definicji. Ale kiedy próbuję nauczyć się jakiegoś słynnego projektu open source, często dręczy mnie pytanie: gdzie znaleźć źródło makr, jeśli nie mogę uzyskać jego definicji, nie zrozumiem niektórych z nich (np. Niektóre z nich można odgadnąć według ich nazwy). na przykład pewne oświadczenie z apache:

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

#elif defined(__NSIG)

jak dla mojej wiedzy, wiem, że istnieje jakieś możliwe miejsce dla makra:

z tego projektu, w jakimś pliku źródłowym (jest to najłatwiejsze, ponieważ możemy je znaleźć za pomocą jakiegoś narzędzia)z jakiegoś pliku nagłówkowego jakiejś trzeciej biblioteki możemy go grepowaćze standardowego pliku nagłówkowego c / c ++ (gdzie są w linuxie?)z os (gdzie są w Linuksie?)automatycznie generowane przez narzędzie konfiguracyjne (jest gorzkie, nie mam pojęcia)z narzędzia kompilatora takiego jak gcc / g ++ lub w makefile możemy zdefiniować pewne makro

Mam pytanie do konsultacji:

jak odróżnić je od zdefiniowanych i skonfigurowanych makr utworzonych przez os i gcc / g ++ respectively czy mają jakieś cechy?jak znaleźć źródło tych zdefiniowanych przez os lub przez standard C lub kompilator? np. za pomocągrep lubfind narzędziaco to znaczy, jeśli jedno makro, takie jak__strange___ nie można znaleźć przez przeczesanie całej maszyny (cd /;grep __strange___ -r)?

Dziękujemy za przekazanie zasady i metody ich odróżnienia oraz znalezienie źródła!

questionAnswers(8)

yourAnswerToTheQuestion