cómo encontrar la fuente de algunas macros

Hay muchos lugares para definir una macro. Cuando definimos la macro en nuestro propio proyecto, es fácil encontrar la posición de definición para ellos. Pero cuando intento aprender algún proyecto de código abierto famoso, la pregunta me acosa con frecuencia: dónde encontrar la fuente de las macros, si no puedo obtener su definición, no entenderé algunas de ellas (p. Ej., Algunas de ellas Se puede adivinar por su nombre). por ejemplo, alguna declaración de apache:

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

#elif defined(__NSIG)

en cuanto a mi conocimiento, sé que hay un posible lugar de origen para una macro:

de este proyecto en sí mismo, en algún archivo fuente (esto es lo más fácil, porque podemos encontrarlo con alguna herramienta)de algún archivo de encabezado de alguna tercera lib., podemos grepdel archivo de encabezado estándar de c / c ++ (¿dónde están en Linux?)desde el os (¿dónde están en linux?)Generado automáticamente por la herramienta de configuración (es amargo, no tengo idea)desde la herramienta del compilador como gcc / g ++, o en el archivo make podemos definir alguna macro

Tengo una pregunta para consultar:

¿Cómo diferenciarlos entre las macros generadas por herramientas definidas por OS y gcc / g ++ definidas y configuradas? ¿Tienen alguna característica respectivamente?¿Cómo encontrar la fuente de los definidos por os o por el estándar C o compilador? por ejemplo, usandogrep ofind utilidades¿Qué significa si una macro como__strange___ No se puede encontrar al peinar toda la máquina (cd /;grep __strange___ -r)?

¡Gracias por decir el principio y el método para distinguirlos y, para encontrar la fuente de ellos!

Respuestas a la pregunta(8)

Su respuesta a la pregunta