Pergunta

Em geral, eu ocasionalmente têm uma cadeia de macros aninhadas com alguns elementos condicionais de pré-processamento em suas definições. Estes podem ser doloroso para depuração, uma vez que é difícil ver diretamente o código real que está sendo executado.

Um tempo atrás eu me lembro vagamente encontrar uma bandeira compilador (gcc) para expandi-los, mas eu tinha problemas para obter isso funcione na prática.

Foi útil?

Solução

gcc -E vontade de saída da fonte pré-processado na saída padrão.

Outras dicas

Para usuários MSVC, você pode botão direito do mouse sobre o arquivo / projeto, exibir as configurações e alterar as propriedades do arquivo para a saída pré-processado fonte (que normalmente no diretório obj).

Isto pode não ser aplicável em sua situação, mas macros realmente dificultar a depuração e, muitas vezes são usado em demasia e evitável.

Você pode substituí-los com funções embutidas ou de outra forma se livrar deles todos juntos?

Você provavelmente deve começar a afastar formar Macros e começar a usar em linha e modelos.

Macros são uma ferramenta de idade, a ferramenta certa, às vezes. Como último recurso, lembre-se printf é seu amigo (e realmente printf não é que um amigo ruim quando o seu fazendo coisas multithreaded)

depuração o dissasembly com os símbolos carregado.

gcc -save-temps vai escrever um .i (ou arquivo .ii para C ++), que é a saída do pré-processador C, antes que seja entregue para o compilador. Isso muitas vezes pode ser esclarecedor.

GCC e compiladores compatíveis usar a opção -E para emitir a fonte pré-processado para fora padrão.

gcc -E foo.cpp

Sun Studio também suporta esta bandeira:

CC -E foo.cpp

Mas o melhor mesmo é -xdumpmacros. Você pode encontrar mais informações em docs Suns'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top