como encontrar a origem de algumas macros

Há muitos lugares para definir uma macro. Quando a macro é definida em nosso próprio projeto por nós, é fácil encontrar a posição de definição para eles. Mas quando eu tento aprender algum projeto famoso de código aberto, eu sou freqüentemente importunado pela pergunta: onde encontrar a fonte das macros, se eu não conseguir a definição, não vou entender algumas delas (por exemplo, algumas delas pode ser adivinhado pelo seu nome). por exemplo, alguma declaração do apache:

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

#elif defined(__NSIG)

quanto ao meu conhecimento, eu sei que há algum possível local de origem para uma macro:

a partir deste projeto em si, em algum arquivo de origem (isso é o mais fácil, porque podemos encontrá-lo por alguma ferramenta)de algum arquivo de cabeçalho de algum terceiro lib, podemos usá-lodo arquivo de cabeçalho padrão c / c ++ (onde eles estão no linux?)do os (onde eles estão no linux?)gerado automaticamente pela ferramenta de configuração (é amargo, não tenho ideia)da ferramenta compiladora como gcc / g ++, ou no makefile podemos definir algumas macro

Eu tenho algumas perguntas para consultar:

como diferenciá-los entre os definidos e gcc / g ++ definidos e configurar macros geradas pela ferramenta - eles têm alguma característica respectivamente?como encontrar a fonte daqueles definidos pelo sistema operacional ou pelo padrão C ou compilador? por exemplo, usandogrep oufind Serviços de utilidade públicao que significa se uma macro como__strange___ não pode ser encontrado, penteando toda a máquina (cd /;grep __strange___ -r)

Obrigado por dizer o princípio e o método para distingui-los e encontrar a fonte deles!

questionAnswers(8)

yourAnswerToTheQuestion