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 macroEu 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!