corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Explorando macros em projetos C/C++ - Tutorial do NetBeans IDE 6.7/6.8

Este tutorial mostra como usar os novos recursos do NetBeans IDE 6.7/6.8/6.9 para examinar e depurar códigos que incluem macros.

Conteúdo

O conteúdo desta página se aplica ao NetBeans IDE 6.7/6.8/6.9

Requisitos

Para seguir este tutorial, você precisa dos seguintes recursos e softwares.

Software ou recurso Versão necessária
NetBeans IDE versão 6.7, 6.8 ou 6.9 do NetBeans com o módulo do plug-in C/C++
Java Developer Kit (JDK) versão 6
Compiladores C e C++, make, gdb

Conjuntos de ferramentas C/C++ testados com o NetBeans IDE

Consulte as Instruções de instalação do NetBeans IDE 6.8 e Configurando o NetBeans IDE para o C/C++/Fortran
para obter informações sobre o download e a instalação do software necessário.

Examinando códigos que usam macros

Nas versões anteriores do NetBeans IDE, as macros ofereciam hyperlinks para que fosse possível clicar nelas e ver sua expansão, o que fazia com que o IDE abrisse o arquivo de cabeçalho onde a macro estava definida. Esta abordagem não é adequada para macros simples, como constantes numéricas ou literal string, quando o objetivo é apenas consultar brevemente a sua definição.

O NetBeans IDE 6.7 inclui dois novos recursos para a exploração de códigos-fonte que contêm macros:

  • Dicas de ferramentas de macro, útil para macros simples e curtas
  • Exibição de expansão da macro, útil para macros mais complexas

Trabalhando com macros simples usando dicas de ferramenta

As dicas de ferramenta para macros permitem visualizar um pequeno pop-up sem que outro arquivo seja aberto.

Para ativar a dica de ferramenta de uma macro para que você possa ver sua expansão:

  1. Pressione Ctrl+Alt.
  2. Coloque o cursor do mouse sobre a macro que deseja expandir, uma dica de ferramenta se abre e exibe as informações ampliadas.
  3. Se quiser obter mais informações, clique na macro enquanto pressiona Ctrl+Alt para abrir a janela Expansão de macro que mostra a função com a macro expandida.

Expansão da dica de ferramenta da macro

Trabalhando com macros complexas usando a exibição da expansão de macro

A exibição de expansão da macro permite analisar códigos-fonte que apresentam macros complexas com várias linhas. As macros são usadas geralmente para definir constantes, mas também podem ser usadas para definir fragmentos de código que podem ser usados como funções. Quando você trabalha com códigos que usam macros dessa forma, pode ser difícil entender o que está acontecendo no código. Pode ser necessário examinar as macros em contexto com o código-fonte que está chamando a macro.

Para visualizar o código-fonte com o código da macro expandido:

  • Clique com o botão direito do mouse na macro e selecione Navegar->Visualizar expansão de macro no menu pop-up.
    A janela Expansão de macro se abre e exige a macro expandida em contexto como código que a chama.
  • Também é possível colocar ao mouse sobre o código em questão pressionando Ctrl+Alt e clicar no hyperlink.

Exibição da expansão da macro

Na janela Expansão de macro, o conteúdo da macro está localizado dentro de blocos protegidos. É fornecido o realce semântico ao código expandido. Você pode usar hyperlinks na exibição da expansão de macro para ir a outros arquivos de código-fonte. Também há realce para utilizações do parâmetro da macro.

A coluna esquerda da janela Expansão de macro apresenta vários botões na barra de ferramentas:

  • Sincronizar cursor, conteúdo e contexto
    Esta opção sincroniza a posição do cursor e do conteúdo no arquivo de código-fonte na janela do editor e na exibição Expansão de macro.
    Também altera o contexto para torná-lo apropriado para a posição do cursor (se Expandir contexto local somente estiver selecionado).
  • Expandir contexto local somente - Somente as macros que estão no bloco de código onde se encontra o cursor são expandidas na janela Expansão de macro.
  • Expandir todo o arquivo
    Todas as macros do arquivo de código-fonte são expandidas na janela Expansão de macro.
  • Setas para cima e para baixo
    Estes botões servem para ir rapidamente para a próxima macro ou para a macro anterior.

Depurando códigos que usam macros

Às vezes, entender o significado de uma macro não é suficiente.
Vamos ver um exemplo simples:

#include <stdlib.h>
#include <iostream>

#define ID_FIRST (0)
#define ID_ALICE (ID_FIRST)
#define ID_BOB (ID_ALICE + 1)
#define ID_TOM (ID_BOB + 1)
#define ID_FRINDS_NUMBER (ID_TOM + 1)

#define NEXT_PERSON(id) (id + 1)
#define PREV_PERSON(id) (id - 1)

using namespace std;

/*
* Função principal
*/
int main(int argc, char** argv) {
int person = ID_TOM;
if (NEXT_PERSON(person) == ID_FRINDS_NUMBER) {
cout << "last person";
}
return (EXIT_SUCCESS);
}

Imagine que paramos o depurador na instrução if e queremos saber se o programa imprimirá ou não "last person" (última pessoa).

A dica de ferramenta da expansão de macro diz que ID_FRINDS_NUMBER é "(((((0))+ 1)+ 1)+ 1)".
Ótimo, mas quanto é? Nesta situação simples é fácil dizer que a resposta é 3, mas imagine se houvesse duas mil pessoas.

Avaliando macros usando dicas de ferramenta

Agora é possível usar a avaliação de expressão em expressões também com macros.
Coloque o mouse sobre ID_FRINDS_NUMBER e você verá:

Avaliação de expressão de macro

Também é possível avaliar toda a expressão:

Avaliação de expressão de macro

Tenha cuidado ao avaliar macros em dicas de ferramenta, pois tal avaliação pode alterar o estado do programa. Por exemplo, a avaliação de macros que se expandem a i++ aumentará i;

Usando observadores para avaliação de macros

Agora é possível usar macros nos observadores do depurador:

Observadores de depuração de macros

Tenha cuidado ao avaliar macros em observadores, pois tal avaliação pode alterar o estado do programa. Por exemplo, a avaliação de macros que se expandem a i++ aumentará i;