Editar y refactorizar código de C++ en Visual Studio

Visual Studio proporciona varias herramientas que sirven para escribir, editar y refactorizar código.

IntelliSense

IntelliSense es una herramienta de finalización de código muy eficaz que sugiere símbolos y fragmentos de código automáticamente a medida que va escribiendo. C++ IntelliSense en Visual Studio se ejecuta en tiempo real y, al actualizar el código base, lo analiza y realiza recomendaciones. A medida que se escriben más caracteres, la lista de resultados recomendados se va acotando.

Captura de pantalla del menú desplegable de la lista de miembros de C++ que muestra los métodos disponibles para la cadena, como anexar, asignar, etc.

Algunos símbolos se omiten automáticamente para ayudar a acotar los resultados. Por ejemplo, al acceder a los miembros de un objeto de clase desde fuera de esta, no podrá ver los miembros privados de forma predeterminada, ni los miembros protegidos (si no está en el contexto de una clase secundaria). El filtrado se puede ajustar con los botones de la parte inferior.

Tras elegir el símbolo de la lista desplegable, se puede autocompletar con las teclas Tabulación o Entrar, o con cualquiera de los otros caracteres de confirmación, que de forma predeterminada son { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \. Para agregar o quitar caracteres de esta lista, busque "IntelliSense" en Inicio rápido (Ctrl+Q) y elija la opción Editor de texto > C/C++ > Avanzado. La opción Caracteres de confirmación de las listas de miembros permite personalizar la lista con los cambios que quiera.

La opción Modo de filtro de la lista de miembros controla qué tipos de sugerencias de Autocompletar de IntelliSense van a aparecer. Esta opción está establecida de manera predeterminada en Aproximada. En una búsqueda aproximada, si tiene un símbolo llamado MyAwesomeClass, puede escribir "MAC" y buscar la clase entre las sugerencias de Autocompletar. El algoritmo aproximado establece un umbral mínimo que los símbolos deben cumplir para figurar en la lista. El filtrado Inteligente muestra todos los símbolos que contienen las subcadenas que coinciden con lo que ha escrito. El filtrado Prefijo busca cadenas que comiencen por lo que ha escrito.

Para obtener más información sobre C++ IntelliSense, vea IntelliSense de Visual C++ y Configurar un proyecto de C++ para IntelliSense.

IntelliCode

IntelliCode es IntelliSense asistido por inteligencia artificial. Coloca al candidato más probable al principio de la lista de finalización. Las recomendaciones de IntelliCode se basan en miles de proyectos de código abierto de GitHub, cada uno con más de 100 estrellas. Cuando se combina en el contexto del código, la lista de finalización se adapta para promover prácticas habituales.

Al escribir C++, IntelliCode será de ayuda al usar bibliotecas muy conocidas, como la biblioteca estándar de C++. El contexto del código se usa para realizar las recomendaciones más útiles en primer lugar. En el siguiente ejemplo, la función miembro size se suele usar con la función sort, por lo que aparece al principio de la lista de resultados.

Captura de pantalla del menú desplegable de IntelliCode de C++ que muestra los miembros de la clase vector ordenados según los que se usan con más frecuencia en el código.

En Visual Studio 2022 y Visual Studio 2019, IntelliCode está disponible como componente opcional en la carga de trabajo Desarrollo para el escritorio con C++ . Para asegurarse de que IntelliCode está activo para C++, vaya a Herramientas>Opciones>IntelliCode>General y establezca Modelo base de C++ en Habilitado.

En Visual Studio 2017, IntelliCode está disponible como una extensión en Visual Studio Marketplace.

IntelliSense predictivo (experimental)

IntelliSense predictivo es una característica experimental que usa el reconocimiento contextual para limitar el número de resultados que aparecen en la lista desplegable de IntelliSense. El algoritmo hace uso de la coincidencia de tipos para mostrar únicamente aquellos resultados que coincidan con el tipo esperado. Siguiendo un ejemplo muy básico, si escribe int x = e invoca la lista desplegable de IntelliSense, solo verá números enteros o funciones que devuelven enteros. Esta característica está desactivada de forma predeterminada porque aún está en fase de desarrollo. Funciona mejor con símbolos globales; todavía no se admiten funciones miembro. Para activarla, escriba "Predictivo" en Inicio rápido o vaya a Herramientas>Opciones>Editor de texto>C/C++>Experimental>Habilitar IntelliSense predictivo.

Para invalidar IntelliSense predictivo y mostrar una lista más larga, presione Ctrl+J. Si IntelliSense predictivo está activado, cuando se invoque Ctrl+J se quitará el filtro predictivo. Si se presiona Ctrl+J otra vez, se quita el filtro de accesibilidad de los resultados de la lista de miembros (cuando proceda). El botón ([+]) situado debajo de la lista desplegable de IntelliSense hace lo mismo que Ctrl+J. Mantenga el puntero sobre este botón para ver una información sobre herramientas sobre qué se está mostrando.

Captura de pantalla de IntelliSense predictivo de C++.

La captura de pantalla anterior muestra varios botones debajo de la lista desplegable. Con ellos, se habilitan los filtros de IntelliSense para obtener distintos tipos de resultados:

  • Variables y constantes
  • Funciones
  • Tipos
  • Macros
  • Enumeraciones
  • Espacios de nombres

Un botón aparece solo si es relevante en la sesión actual de IntelliSense. Normalmente, no se ven todos los botones al mismo tiempo.

IntelliSense para plantilla

La barra de plantillas es un elemento de interfaz de usuario que aparece cuando el cursor se encuentra sobre una definición de plantilla. Resulta útil porque puede proporcionar argumentos de plantilla de ejemplo para IntelliSense que aparecerán al editar el cuerpo de la plantilla. Por ejemplo, puede especificar que un argumento de plantilla sea de tipo std::vector<int>. Después, cuando use ese argumento en el cuerpo de la plantilla, verá los miembros de std::vector<int> en IntelliSense.

Captura de pantalla de la barra de plantillas que tiene la opción Agregar todas las instancias existentes resaltada.

Haga clic en el icono <T> para expandir o contraer la barra de plantillas. Haga clic en el icono de lápiz o haga doble clic en la Barra de plantillas para abrir la ventana Editar donde se especifican los tipos de argumento para los parámetros.

Captura de pantalla de la experiencia de edición dentro de la barra de plantillas donde se escribe un tipo para cada parámetro de plantilla.

La Barra de plantillas puede rellenar automáticamente los tipos de parámetros en función de las instancias de la plantilla en el código. Haga clic en Agregar todas las creaciones de instancias existentes para ver una lista de todos los argumentos concretos que se han usado para crear instancias de la plantilla a lo largo del código base.

Captura de pantalla de los resultados de IntelliSense de plantilla que enumeran los distintos tipos usados para crear instancias del parámetro de plantilla C, como C = AmbientLight, C = Candle y otros.

Una ventana en la parte inferior del editor señala dónde se ha detectado cada creación de instancias y cuáles han sido sus argumentos. Puede seleccionar una creación de instancias para ir a la ubicación en el código donde se encontró esa creación de instancias.

Captura de pantalla de la lista de instancias de la plantilla en el código. Se enumeran las instancias, el archivo, la ubicación y los argumentos.

La información de la Barra de plantillas es específica del usuario. Se almacena en la carpeta .vs y no se confirma en el control de código fuente.

Subrayados ondulados de error y soluciones rápidas

Si el editor detecta problemas con el código, agregará subrayados ondulados de color debajo del problema. Un subrayado ondulado de color rojo señala código que no se va a compilar. El subrayado ondulado de color verde señala otros tipos de problemas, que pueden llegar a ser graves. Puede abrir la ventana Lista de errores para obtener más información sobre los problemas.

En algunos tipos de errores, y en patrones de programación comunes, el editor ofrecerá una corrección rápida en forma de bombilla, que aparece cuando se mantiene el puntero sobre el subrayado ondulado. Haga clic en la flecha abajo para ver las sugerencias.

En el siguiente ejemplo, hay un elemento vector declarado, pero no se encontró ninguna definición, por lo que el editor sugiere incluir el archivo de encabezado necesario:

Captura de pantalla de un error y la corrección rápida propuesta para # incluir vector.

El editor también ofrece soluciones rápidas en algunas oportunidades de refactorización. Por ejemplo, si declara una clase en un archivo de encabezado, Visual Studio propondrá crear una definición para ella en un archivo .cpp aparte.

Captura de pantalla en la que se muestra la corrección rápida con la opción Crear definición de ChannelRouterIterator en channels.ccp resaltada.

Seguimiento de cambios

Cada vez que haga un cambio en un archivo, aparecerá una barra amarilla a la izquierda que informa de que se han realizado cambios sin guardar. Cuando guarde el archivo, la barra cambiará a color verde. Las barras verde y amarilla siguen apareciendo mientras el documento esté abierto en el editor. Señalan los cambios realizados desde que el documento se abrió por última vez.

Captura de pantalla del seguimiento de cambios de C++. Aparece una barra amarilla abajo a la izquierda para indicar los cambios.

Mover código

Las líneas de código se pueden subir y bajar; para ello, solo tiene que seleccionarlas manteniendo la tecla Alt presionada y presionar las teclas de dirección arriba/abajo.

Insertar fragmentos de código

Un fragmento de código es una parte de código fuente predefinida. Haga clic con el botón derecho en un único punto o en el texto seleccionado y seleccione Fragmento de código para insertar un fragmento de código o rodear el texto seleccionado con el fragmento de código. La siguiente ilustración muestra los tres pasos necesarios para envolver una instrucción seleccionada con un bucle for. Las partes resaltadas en amarillo de la imagen final son campos que se pueden editar y a los que puede acceder con la tecla TAB. Para obtener más información, vea Fragmentos de código.

Captura de pantalla del control desplegable Insertar fragmento de código.

Una función está seleccionada. En la lista desplegable que aparece después de hacer clic con el botón derecho en el nombre de la función, Rodear con... está resaltado en amarillo. En la lista desplegable Rodear con..., se selecciona el fragmento de código de un bucle "for". Esto da como resultado la colocación de un bucle for alrededor de la función. La variable de bucle y el límite se muestran en amarillo para indicar que son campos editables.

Agregar clase

Agregue una nueva clase desde el menú Proyecto o desde el menú contextual del Explorador de soluciones:

Captura de pantalla del cuadro de diálogo Agregar nueva clase. Tiene campos para el nombre de clase, la accesibilidad, los archivos para colocar la declaración y la implementación, etc.

También puede usar el Asistente para clases para modificar o examinar una clase existente.

Captura de pantalla del Asistente para clases que tiene opciones para agregar métodos, variables miembro y mucho más.

Para obtener más información, vea Agregar funcionalidad con los asistentes para código (C++).

Refactorización

Las refactorizaciones están disponibles bajo el menú contextual Acción rápida, o bien haciendo clic en una bombilla en el editor. Algunas se encuentran en el menú Editar > Refactorizar. Entre ellas se incluyen:

Aplicación de estilo de código con ClangFormat y EditorConfig

Visual Studio 2017 y las versiones posteriores incluyen compatibilidad integrada con ClangFormat, una conocida utilidad de formato de código para C++ basada en Clang/LLVM. Escriba "ClangFormat" en Inicio rápido para configurarla para que use uno de estos formatos comunes:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Programa para la mejora

También puede proporcionar su propio archivo .clang-format o _clang-format para aplicar reglas personalizadas a todos los archivos de código del mismo nivel o por debajo.

Estos archivos se pueden compartir fácilmente a través del control de código fuente, lo que permite que todo el equipo de desarrollo use las mismas convenciones de código.

Captura de pantalla que muestra un archivo de formato .clang que tiene muchas opciones, como el límite de columnas, el ancho de sangría, el ancho de tabulación, etc.

Visual Studio 2017 y las versiones posteriores también admiten EditorConfig, que funciona de forma similar, si bien ClangFormat tiene más opciones de estilo que EditorConfig, incluido reglas que son específicas de C++. Con EditorConfig se crean archivos .editorconfig y se ponen en diferentes carpetas del código base para especificar estilos de código aplicables a esas carpetas y sus subcarpetas. Un archivo .editorconfig sustituye cualquier otro archivo .editorconfig que haya en las carpetas principales, y sobrescribe cualquier configuración de formato que se haya establecido a través de Herramientas>Opciones. Se pueden establecer reglas de tabulaciones frente a espacios o tamaños de sangría, entre otras muchas cosas. Para obtener más información, vea Crear opciones de configuración del editor personalizadas y portátiles con EditorConfig.

Otras opciones de formato

El cuadro de búsqueda Inicio rápido constituye la forma más rápida de encontrar una configuración o una herramienta. Se encuentra en el menú principal. Solo tiene que empezar a escribir y la lista de autocompletar filtrará los resultados.

Captura de pantalla del cuadro de búsqueda Inicio rápido. Muestra la búsqueda de C++ avanzada, lo que da como resultado opciones para el editor de texto.

Para establecer opciones de formato, como sangrías, finalización de llave y uso de colores, escriba "Formato de C++" en la ventana Inicio rápido.

Captura de pantalla en la que se muestran opciones de formato de C++, como si se va a aplicar sangría automática al escribir una pestaña.

Encontrará otras opciones de formato en Editar>Avanzado en el menú principal.

Captura de pantalla que muestra opciones de edición avanzadas, como un espacio en blanco de visualización, ajuste de línea, comentario de una selección, aumento de sangría de línea, etc.

Las opciones para habilitar y configurar características de edición específicas de C++ se encuentran en Herramientas>Opciones>Editor de texto>C/C++ . Después de elegir la opción que quiere establecer, puede obtener más ayuda si presiona F1 cuando el cuadro de diálogo tenga el foco. Para acceder a las opciones de formato de código generales, escriba Editor C++ en Inicio rápido.

Captura de pantalla que muestra el elemento de menú Herramientas de Visual Studio seleccionado y el elemento de menú Opciones resaltado.

Las características experimentales, que se podrían incluir o no en una versión futura de Visual Studio, se encuentran en el cuadro de diálogo Editor de texto C++ Experimental. En Visual Studio 2017 y versiones posteriores, IntelliSense predictivo se puede habilitar en este cuadro de diálogo.

Vea también

Lectura y descripción del código de C++
Navegación en el código base de C++ en Visual Studio
Colaboración con Live Share para C++