Есть много мест для определения макроса. Когда макрос определен нами в нашем собственном проекте, нам легко найти позицию определения для них. Но когда я пытаюсь изучить какой-то известный проект с открытым исходным кодом, меня часто беспокоит вопрос: где найти источник макросов, если я не могу его определить, я не пойму некоторых из них (например, некоторые из них могут быть угаданы по их имени). например, некоторый оператор из apache:
#if defined(__osf__) && defined(__alpha),
#elif defined(__NSIG)
Что касается моих знаний, я знаю, что есть несколько возможных мест для макроса:
- из этого самого проекта, в каком-то исходном файле (это проще всего, потому что мы можем найти его каким-то инструментом)
- из некоторого заголовочного файла некоторой третьей библиотеки lib, мы можем grep его
- из стандартного заголовочного файла c/С++ (где они находятся в Linux?)
- из os (где они находятся в linux?)
- автоматически генерируется инструментом configure (он горький, я понятия не имею)
- из инструмента компилятора, такого как gcc/g++, или в make файле, мы можем определить макрос
У меня есть вопрос, чтобы проконсультироваться:
- как различать их между определенными os и gcc/g++ и настраивать сгенерированные с помощью макроса инструменты? У них есть некоторые характеристики, соответственно?
- как найти источник тех, которые определены os или стандартным C или компилятором? например, используя утилиты
grep
илиfind
- что это означает, что нельзя найти один макрос, такой как
__strange___
, путем расчесывания всей машины (cd /;grep __strange___ -r
)?
Спасибо, что рассказали принцип и метод, чтобы отличить их и, чтобы найти их источник!