Pré-processador C: Diagnóstico – Parte 3

funções X macros compilação condicional Diagnóstico
Este post faz parte da série Pré-processador C. Leia também os outros posts da série:

Olá, caro leitor! Continuando o assunto sobre o pré-processador C, vamos discutir neste artigo alguns recursos utilizados para realizar diagnóstico durante o processo de compilação e execução de um programa. Vamos lá!

Macros Predefinidas para Diagnóstico

O padrão C ANSI possui algumas macro predefinidas que podem ser utilizadas na codificação. Cabe ressaltar que o próprio compilador pode definir algumas macros. As macros predefinidas são:

__LINE__

É um número inteiro que representa a linha atual do arquivo que está sendo compilado.

__FILE__

É uma string que representa o nome do arquivo que está sendo compilado.

__DATE__

É uma string que representa a data (formato “Mmm dd yyyy”) em que o arquivo foi compilado.

__TIME__

É uma string que representa o horário (formato “hh:mm:ss”) em que o arquivo foi compilado.

__STDC__

É um número inteiro que indica se o compilador segue o padrão C ANSI. Se o valor é igual à constante decimal 1 então o compilador segue o padrão C ANSI, caso contrário o compilador segue outro padrão.

Controle de linha

A diretiva #line é utilizada para indicar ao pré-processador qual o número da linha que está sendo processada. Essa diretiva pode ser utilizada para prover uma informação mais detalhada do processo de compilação/depuração, oferecendo diagnóstico durante essa fase.

Quando essa diretiva é utilizada, o conteúdo das macros __LINE__ e __FILE__ são alteradas conforme o contexto. Essa diretiva pode ser utilizada de duas maneiras, sendo sua forma geral:

O nome do arquivo é um parâmetro opcional. Considere, por exemplo, o código abaixo: 

A declaração de

determina que a contagem de linha é iniciada com o valor 300. No exemplo as macros __FILE__ e __LINE__ são utilizadas para formatar uma mensagem com detalhes da linha e do arquivo em que a operação é executada.

Instruções para o compilador

Para instruir o compilador a diretiva #pragma pode ser utilizada. As instruções que podem ser utilizadas estão diretamente relacionadas com o compilador, sendo necessário consultar o seu manual para verificar os argumentos e instruções disponibilizados. A sua forma geral é:

A <string> representa a instrução e os argumentos informados.

Por exemplo, no compilador GCC temos a instrução message, que é responsável por exibir uma mensagem durante o processo de compilação. 

Diagnóstico

Uma macro muito utilizada no processo de depuração é definida na biblioteca C padrão ASSERT.h. A macro é chamada de assert e tem como função testar se uma determinada condição é verdadeira, caso contrário o programa é encerrado.

No exemplo, se a condição testada é falsa o programa será encerrado com a seguinte mensagem:

Esses testes são úteis durante a depuração de um programa justamente para diagnóstico de possíveis falhas de execução devido a um estado inválido do programa, para isso a macro pode ser definida ou removida conforme o símbolo NDEBUG. Se a macro NDEBUG for definida então a macro assert() será ignorada e não terá efeito no programa.

Conclusão

Neste artigo foram apresentados, de maneira introdutória, alguns recursos do pré-processador que auxiliam o processo de depuração de aplicações e de diagnóstico de erros. Como foi demonstrado, com a utilização das asserções é possível verificar o estado de uma aplicação durante sua execução tornando-se uma ferramenta importante para encontrar bugs. Outra forma de diagnóstico pode ser realizada durante o processo de compilação, uma vez que as diretivas intrínsecas do pré-processador apresentam informações desse processo.

Na quarta parte deste artigo será apresentada uma técnica de expansão de macros chamada X macros.

Referências

[1] Livro: C, completo e total – 3ª edição revista e atualizada. Herbert Schildt.

Outros artigos da série

<< Pré-processador C: Compilação condicional – Parte 2Pré-processador C: X macros – Parte 4 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Andre Tenorio
( André Tenório )
17/09/2015 08:49

Muito bom!

Fernando Deluno Garcia
Fernando Deluno Garcia
Reply to  ( André Tenório )
18/09/2015 09:34

Obrigado, André!

Talvez você goste:

Séries



Outros da Série

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services