Editar e refatorar o código C++ no Visual Studio

O Visual Studio fornece várias ferramentas para ajudá-lo a escrever, editar e refatorar o código.

IntelliSense

O IntelliSense é uma ferramenta eficiente de preenchimento de código que sugere símbolos e snippets de código para você conforme você digita. O C++ IntelliSense no Visual Studio é executado em tempo real, analisando a base de código conforme você a atualiza e fornecendo recomendações. Conforme você digita mais caracteres, a lista de resultados recomendados é restringida.

Captura de tela da lista suspensa de membros do C++ mostrando os métodos disponíveis para cadeia de caracteres, como acréscimo, atribuição e assim por diante.

Alguns símbolos são omitidos automaticamente para ajudar a restringir os resultados. Por exemplo, ao acessar os membros de um objeto de classe de fora da classe, você não pode ver os membros privados por padrão ou os membros protegidos (quando não está no contexto de uma classe filho). Ajuste a filtragem usando os botões na parte inferior.

Depois de escolher o símbolo na lista suspensa, preencha-o automaticamente com Tab, Enter ou um dos caracteres de confirmação (por padrão: { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Para adicionar ou remover caracteres dessa lista, pesquise "IntelliSense" em Início Rápido (Ctrl+Q) e escolha a opção Editor de Texto > C/C++ > Avançado. A opção Caracteres de Confirmação da Lista de Membros permite que você personalize a lista com as alterações desejadas.

A opção Modo de Filtro da Lista de Membros controla quais tipos de sugestões de preenchimento automático do IntelliSense são exibidos. Por padrão, ela é definida como Difuso. Em uma pesquisa difusa, se você tiver um símbolo chamado MyAwesomeClass, poderá digitar "MAC" e localizar a classe nas sugestões de preenchimento automático. O algoritmo difuso define um limite mínimo ao qual os símbolos precisam atender para serem mostrados na lista. A filtragem inteligente exibe todos os símbolos que contêm subcadeias de caracteres que correspondem ao que foi digitado. A filtragem de prefixo pesquisa cadeias de caracteres que começam com o que foi digitado.

Para obter mais informações sobre o C++ IntelliSense, confira Visual C++ IntelliSense e Configurar um projeto C++ para o IntelliSense.

IntelliCode

O IntelliCode é o IntelliSense assistido por IA. Ele coloca o candidato mais provável no início da lista de conclusão. As recomendações do IntelliCode são baseadas em milhares de projetos open-source no GitHub, cada um com mais de 100 estrelas. Quando combinada com o contexto do código, a lista de conclusão é adaptada para promover práticas comuns.

Ao escrever em C++, o IntelliCode ajudará durante o uso de bibliotecas populares, como a Biblioteca Padrão C++. O contexto do código é usado para fornecer as recomendações mais úteis primeiro. No exemplo a seguir, a função membro size é usada com a função sort e, portanto, é exibida na parte superior da lista de resultados.

Captura de tela da lista suspensa do IntelliCode do C++, que mostra os membros da classe de vetor classificados pelos mais usados no código.

No Microsoft Visual Studio 2022 e Microsoft Visual Studio 2019, o IntelliCode está disponível como um componente opcional na carga de trabalho Desenvolvimento para desktop com C++. Para verificar se o IntelliCode está ativo para o C++, acesse Ferramentas>Opções>IntelliCode>Geral e defina Modelo base do C++ como Habilitado.

No Visual Studio 2017, o IntelliCode está disponível como uma extensão no Visual Studio Marketplace.

IntelliSense Preditivo (experimental)

O IntelliSense Preditivo é um recurso experimental que usa o reconhecimento contextual para limitar o número de resultados exibidos na lista suspensa do IntelliSense. O algoritmo aplica a correspondência de tipos, de modo que ele mostre somente os resultados que correspondem ao tipo esperado. No caso mais simples, se você digitar int x = e invocar a lista suspensa do IntelliSense, verá apenas inteiros ou funções que retornam inteiros. Esse recurso está desativado por padrão porque ainda está em desenvolvimento. Ele funciona melhor com símbolos globais. Ainda não há suporte para funções de membro. Você pode ativá-la digitando "Preditivo" em Início Rápido ou acessando Ferramentas>Opções>Editor de Texto>C/C++>Experimental>Habilitar IntelliSense Preditivo.

Para substituir o IntelliSense Preditivo e mostrar a lista mais longa, pressione Ctrl + J. Se o IntelliSense Preditivo estiver ativado, invocar Ctrl + J removerá o filtro Preditivo. Pressionar Ctrl+J novamente removerá o filtro de acessibilidade dos resultados da Lista de Membros quando relevante. O botão ([+]) na lista suspensa do IntelliSense faz a mesma coisa que Ctrl + J. Passe o mouse sobre o botão para ver informações da dica de ferramenta sobre o que está sendo mostrado.

Captura de tela do Predictive IntelliSense C plus plus.

A captura de tela anterior mostra vários botões na lista suspensa. Eles habilitam filtros do IntelliSense para diferentes tipos de resultados:

  • Variáveis e constantes
  • Funções
  • Tipos
  • Macros
  • Enumerações
  • Namespaces

Um botão é exibido somente quando relevante para a sessão atual do IntelliSense. Normalmente, os botões não aparecem todos ao mesmo tempo.

IntelliSense de modelo

A barra de modelos é um elemento de interface do usuário que aparece quando o cursor está em uma definição de modelo. Isso é útil porque você pode fornecer argumentos de modelo de exemplo ao intellisense que aparecerão quando o corpo do modelo for editado. Por exemplo, você pode especificar que um argumento do modelo é do tipo std::vector<int>. Em seguida, ao usar esse argumento no corpo do modelo, você verá os membros do std::vector<int> no intellisense.

Captura de tela da barra de modelos com a opção

Clique no ícone <T> para expandir/recolher a Barra de Modelo. Clique no ícone de lápis ou clique duas vezes na Barra de Modelos para abrir a janela Editar em que você especifica os tipos de argumento para os parâmetros.

Captura de tela da experiência de edição dentro da barra de modelos em que você insere um tipo para cada parâmetro de modelo.

A barra de modelos pode popular automaticamente tipos de parâmetro com base em instanciações do modelo no código. Clique em Adicionar Todas as Instanciações Existentes para ver uma lista de todos os argumentos concretos que foram usados para criar uma instância do modelo em toda a base de código.

Captura de tela dos resultados do IntelliSense do modelo listando os diferentes tipos usados para criar uma instância do parâmetro de modelo C, como C = AmbientLight, C = Candle e outros.

Uma janela na parte inferior do editor mostra o local em que cada instanciação foi encontrada e quais eram os argumentos. Você pode selecionar uma instanciação para acessar o local no código em que ela foi encontrada.

Captura de tela da lista de instanciações do modelo no código. A instância, o arquivo, o local e os argumentos são listados.

As informações da Barra de Modelos são específicas do usuário. Ela fica armazenada na pasta .vs e não está confirmada no controle do código-fonte.

Rabiscos de erro e correções rápidas

Se o editor detectar problemas com o código, ele adicionará rabiscos coloridos sob o problema. Rabiscos vermelhos indicam um código que não será compilado. Rabiscos verdes indicam outros tipos de problemas que podem ser graves. Abra a janela Lista de Erros para obter mais informações sobre os problemas.

Para alguns tipos de erros e padrões comuns de codificação, o editor oferece uma Correção Rápida em forma de lâmpada que aparece quando você passa o mouse sobre os textos sublinhados. Clique na seta para baixo para ver as sugestões.

No exemplo a seguir, um vector foi declarado, mas nenhuma definição foi encontrada e, portanto, o editor oferece a inclusão do arquivo de cabeçalho necessário:

Captura de tela de um erro e a correção rápida proposta para o vetor # include.

O editor também oferece Correções Rápidas para algumas oportunidades de refatoração. Por exemplo, se você declarar uma classe em um arquivo de cabeçalho, o Visual Studio oferecerá a criação de uma definição para ele em um arquivo .cpp separado.

Captura de tela mostrando a correção rápida com a opção Criar definição do iterador de rota de canal nos canais de opção dot C P P realçada.

controle de alterações

Sempre que você fizer uma alteração em um arquivo, uma barra amarela será exibida à esquerda para indicar que alterações não salvas foram feitas. Quando você salvar o arquivo, a barra ficará verde. As barras verde e amarela serão preservadas, desde que o documento esteja aberto no editor. Elas representam as alterações feitas desde que você abriu o documento pela última vez.

Captura de tela do controle de alterações do C++. Uma barra amarela à esquerda parece indicar alterações.

Mover o código

Você pode mover as linhas de código para cima e para baixo selecionando-as, mantendo pressionada a tecla Alt e pressionando as teclas de direção Para Cima/Para Baixo.

Inserir snippets

Um snippet é uma parte predefinida do código-fonte. Clique com o botão direito do mouse em um só ponto ou no texto selecionado e escolha Snippet para inserir um snippet ou colocar o texto selecionado dentro de um snippet. A ilustração a seguir mostra as três etapas para colocar uma instrução selecionada entre um loop for. Os realces em amarelo na imagem final são campos editáveis acessados com a tecla TAB. Para obter mais informações, consulte Snippets de Código.

Captura de tela do controle suspenso Inserir Snippet.

Uma função está selecionada. Na lista suspensa que aparece após um clique com o botão direito do mouse no nome da função, a opção Surround With... é realçada em amarelo. No menu suspenso Surround With: o snippet de código de um loop 'for' está selecionado. Isso resulta na colocação da função dentro de um loop for. A variável de loop e o limite são mostrados em amarelo para indicar que são campos editáveis.

Adicionar Classe

Adicione uma nova classe por meio do menu Projeto ou do menu de contexto em Gerenciador de Soluções:

Captura de tela da caixa de diálogo Adicionar Nova Classe. A opção tem campos para o nome de classe, acessibilidade, arquivos para colocar a declaração e a implementação e assim por diante.

Use também o Assistente de Classe para modificar ou examinar uma classe existente.

Captura de tela do Assistente de Classe que tem opções para adicionar métodos, variáveis de membro e muito mais.

Para obter mais informações, confira Adicionando funcionalidade com assistentes de código (C++).

Refatoração

As refatorações estão disponíveis no menu de contexto de Ação Rápida ou clicando em uma lâmpada no editor. Algumas também são encontradas no menu Editar > Refatorar. Esses recursos incluem:

Imposição de estilo de código com o ClangFormat e o EditorConfig

O Visual Studio 2017 e posterior vem com suporte interno para o ClangFormat, um utilitário de formatação de código popular para o C++ baseado no Clang/LLVM. Digite "ClangFormat" em Início Rápido para defini-lo para usar um destes formatos comuns:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

Você também pode fornecer o próprio arquivo .clang-format ou _clang-format para aplicar regras personalizadas a todos os arquivos de código no mesmo nível ou abaixo.

Os arquivos podem ser compartilhados com facilidade por meio do controle do código-fonte e, portanto, você pode impor convenções de codificação a toda a equipe de desenvolvimento.

Captura de tela mostrando um arquivo no formato .clang que tem várias opções, como limite de coluna, largura do recuo, largura da tabulação e assim por diante.

O Visual Studio 2017 e posterior também dá suporte ao EditorConfig, que funciona de maneira semelhante. No entanto, o ClangFormat traz mais opções de estilo do que o EditorConfig, incluindo regras específicas do C++. Com o EditorConfig, você cria arquivos .editorconfig e coloca-os em pastas diferentes da base de código para especificar estilos de código para essas pastas e suas subpastas. Um arquivo .editorconfig substitui qualquer outro arquivo .editorconfig nas pastas pai e substitui as configurações de formatação definidas por meio de Ferramentas>Opções. Defina regras para tabulações vs. espaços, o tamanho do recuo, entre outros. Para obter mais informações, confira Criar configurações portáteis do editor personalizado com o EditorConfig.

Outras opções de formatação

A caixa de pesquisa Início Rápido fornece a maneira mais rápida de localizar uma configuração ou ferramenta. Ela está localizada no menu principal. Basta começar a digitar e a lista de preenchimento automático filtrará os resultados.

Captura de tela da caixa de pesquisa de Início Rápido. Ela mostra a pesquisa avançada do C++, que resulta em opções para o editor de texto.

Para definir opções de formatação como recuos, preenchimento de chaves e colorização, digite "Formatação do C++" na janela Início Rápido.

Captura de tela mostrando opções de formatação do C++. Por exemplo, se o recuo deve ocorrer automaticamente quando uma tabulação é inserida.

Outras opções de formatação estão localizadas em Editar>Avançado no menu principal.

Captura de tela mostrando opções avançadas de edição, como exibição de espaço em branco, quebra automática de linha, comentário de uma seleção, recuo de linha crescente e muito mais.

As opções para habilitar e configurar recursos de edição específicos do C++ estão localizadas em Ferramentas>Opções>Editor de Texto>C/C++. Depois de escolher a opção que deseja definir, você obtenha mais ajuda pressionando F1 quando a caixa de diálogo estiver no foco. Para obter opções gerais de formatação de código, digite Editor C++ em Início Rápido.

Captura de tela mostrando o item de menu Ferramentas do Visual Studio selecionado e o item de menu Opções realçado.

As funcionalidades experimentais, que podem ou não ser incluídas em uma versão futura do Visual Studio, são encontradas na caixa de diálogo Experimental do C++ do Editor de Texto. No Visual Studio 2017 e posterior, você pode habilitar o IntelliSense Preditivo nessa caixa de diálogo.

Consulte Também

Ler e entender o código C++
Navegue pela base de código do C++ no Microsoft Visual Studio
Colaborar com o Live Share para C++