как найти источник некоторых макросов

Есть много мест для определения макроса. Когда макрос определяется нами в нашем собственном проекте, легко найти для него позицию определения. Но когда я пытаюсь изучить какой-нибудь известный проект с открытым исходным кодом, меня часто донимает вопрос: где найти исходник макросов, если я не могу получить его определение, я не пойму некоторые из них (например, некоторые из них можно догадаться по названию).например, какое-то утверждение от apache:

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

#elif defined(__NSIG)

насколько мне известно, я знаю, что есть возможное место происхождения макроса:

  1. из самого этого проекта, в каком-то исходном файле (это проще всего, потому что мы можем найти это каким-то инструментом)
  2. из какого-то заголовочного файла какой-то третьей библиотеки, мы можем найти его
  3. из стандартного заголовочного файла c/c++ (где они в Linux?)
  4. из ОС (где они в linux?)
  5. автоматически генерируется инструментом настройки (это горько, я понятия не имею)
  6. из инструмента компиляции, такого как gcc/g++, или в make-файле мы можем определить какой-то макрос

У меня есть вопрос для консультации:

  1. как различать их между определенными os и определенными gcc / g ++ и настраивать макросы, созданные инструментом? Имеют ли они какую-то характеристику соответственно?
  2. как найти источник тех, которые определены ОС или стандартом C или компилятором? например, используя утилиты grepили find
  3. , что это значит, если один макрос, такой как __strange___, не может быть найден путем прочесывания всей машины ( cd /;grep __strange___ -r)?

Спасибо, что рассказали принцип и метод их различения и нахождения их источника!

19
задан unkulunkulu 29 June 2012 в 07:17
поделиться