niko p.
Soy un completo principiante en el uso de Visual Studio Code y no tengo ni idea de lo que estoy haciendo.
He buscado (tal vez no lo suficiente), pero no puedo encontrar una explicación simple para alguien como yo sobre cómo configurar el c_cpp_properties.json
archivo al que se me redirige cada vez que hago clic en la bombilla de luz amarilla junto a una línea que está subrayada con un garabato verde.
Solo quiero saber que poner en el .json
para que IntelliSense funcione correctamente.
Sushant Chaudhary
De la documentación oficial de la extensión C/C++:
Configuración de includePath para obtener mejores resultados de IntelliSense
Si ve el siguiente mensaje al abrir una carpeta en Visual Studio Code, significa que el motor C++ IntelliSense necesita información adicional sobre las rutas en las que se encuentran sus archivos de inclusión.
¿Dónde se definen las rutas de inclusión?
Las rutas de inclusión se definen en el "includePath"
configuración en un archivo llamado c_cpp_properties.json ubicado en el directorio .vscode en la carpeta abierta.
Puede crear o abrir este archivo utilizando el "C/Cpp: Edit Configurations"
en la paleta de comandos o seleccionando "Edit "includePath" setting"
en el menú de la bombilla (vea la captura de pantalla a continuación). La forma más rápida de ubicar una bombilla es desplazarse hasta la parte superior del archivo de origen y hacer clic en cualquier garabato verde que aparezca debajo de una instrucción #include.
Cuando se abre una carpeta, la extensión intenta ubicar los encabezados de su sistema según su sistema operativo, pero no conoce ninguna otra biblioteca de la que dependa su proyecto. Puede pasar el cursor sobre los garabatos verdes o abrir la ventana Problemas para comprender qué encabezados no puede abrir el motor de IntelliSense; a veces, son los encabezados dependientes los que no se pueden ubicar.
¿Cómo puedo especificar las rutas de inclusión?
Puede especificar las rutas restantes utilizando una de las técnicas que se describen a continuación.
-
Use el archivo compile_commands.json para proporcionar includePaths y definir información
La extensión puede obtener la información para
"includePath"
y"defines"
desde un archivo compile_commands.json, que muchos sistemas de compilación pueden generar automáticamente, como CMake y Ninja. Busque la sección donde se define su configuración actual (por defecto hay una configuración por sistema operativo, como “Win32 o “Mac”), y configure el"compileCommands"
propiedad en c_cpp_properties.json a la ruta completa a su archivo compile_commands.json y la extensión usará eso en lugar del"includes"
y"defines"
propiedades para IntelliSense. -
Use las sugerencias de bombillas para resolver automáticamente includePath
Lo primero que debe intentar es aprovechar las sugerencias de ruta de la bombilla para resolver automáticamente las rutas de inclusión. Cuando abre una carpeta, la extensión recursivamente busque posibles rutas de inclusión que coincidan con los archivos de encabezado que usa su código en función de las rutas establecidas por el
"browse.path"
instalándose c_cpp_properties.json. Haga clic en los garabatos verdes debajo de las declaraciones #include y verá una bombilla que ofrece sugerencias de rutas que permitirán que IntelliSense resuelva el archivo incluido.Si no ve sugerencias de ruta en la bombilla, intente agregar la carpeta raíz donde probablemente se encuentren los encabezados en el
"browse.path"
instalándose c_cpp_properties.json. Esto permite que la extensión recursivamente busque en estas carpetas y ofrezca más sugerencias en la bombilla a medida que avanza el proceso de búsqueda. -
Agregar manualmente rutas de inclusión
Si nada de lo anterior resuelve completamente las rutas, puede especificar manualmente las rutas a los encabezados de los que depende su proyecto en el c_cpp_properties.json expediente. Busque la sección donde se define su configuración actual (de manera predeterminada, hay una configuración por sistema operativo, como “Win32 o “Mac”), y agregue sus rutas en el
"includePath"
ajuste y define en el"defines"
ajuste. Por ejemplo, la siguiente captura de pantalla muestra un fragmento del archivo que especifica la ruta para la configuración de Mac.Además, para MinGW, como explica la documentación de la extensión Tu puedes preguntar gcc/g++ para enumerar sus propios archivos de inclusión:
gcc -v -E -x c++ nul
Verifique que las rutas de inclusión estén resueltas correctamente
Hay dos formas de verificar que las rutas de inclusión se resuelvan correctamente:
- Los garabatos verdes en el archivo de origen ya no se muestran
- Los mensajes de error se borran en la ventana Problemas
Esto indica que el motor de IntelliSense ha resuelto las rutas de inclusión para que pueda comenzar a disfrutar de IntelliSense completo para su código C o C++ para la unidad de traducción actual. Tenga en cuenta que aún puede ver errores en otros archivos si pertenecen a una unidad de traducción diferente que requiere que se configuren rutas de inclusión adicionales.
Si esto no resolvió su problema, consulte la configuración de MinGW a continuación e intente establecer la ubicación adecuada para su instalación de Cygwin para los archivos y carpetas de encabezado respectivos/similares.
-
simplemente copiaste/pegaste el documento oficial, ¿no?
– Shihab Shahriar Khan
18 de febrero de 2018 a las 15:39
-
¿No viste el primer texto de mi respuesta?
–Sushant Chaudhary
18 de febrero de 2018 a las 23:17
-
Yo mismo he estado contribuyendo al desarrollo de esta extensión C/C++ para VSCode, por lo tanto, creo que merezco este derecho de al menos copiar, editar y publicar una parte de la documentación para alguien que podría necesitarla y no la necesita. tener una pista al respecto. Además, también he vinculado las fuentes originales al final.
–Sushant Chaudhary
19 de febrero de 2018 a las 5:21
-
@ShihabShahriar Estrictamente hablando, el repositorio de origen está bajo la licencia MIT, por lo que la documentación probablemente también lo esté, lo que por extensión podría significar que esta respuesta también está bajo la licencia MIT.
– Farap
4 de julio de 2018 a las 8:25
-
Todas las URL de tus imágenes están rotas
– Dan
2 de julio de 2019 a las 15:10
Oliver Whittlef
Desde C/C++ para Visual Studio Code (versión preliminar):
A continuación, puede ver que la ruta de inclusión de MinGW C++ se ha agregado a browser.path para Windows:
{
"name": "Win32",
"includePath": [
"${workspaceRoot}"
],
"defines": [
"_DEBUG",
"UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
"path": [
"${workspaceRoot}",
"C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include\\c++"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
-
Tengo cygwin instalado, ¿sabes cuál sería el código para eso?
– Niko P.
18 de septiembre de 2017 a las 1:02
-
Además, cuando introduzco un código que es diferente del código original, aparece el error “Error al analizar” e:\\.vscode\c_cpp_properties.json”: Token inesperado]en JSON en la posición 1896″
– Niko P.
18 de septiembre de 2017 a las 1:06
VSCode es muy hábil para preguntarle al compilador qué rutas de inclusión está utilizando si configura las cosas correctamente. Parte de mi proyecto usa un compilador DSP basado en GCC, por lo que al agregar “-v” a las banderas del compilador (lo puse en CFLAGS en mi Makefile) pude ver las líneas de comando internas que revelaron que las banderas “secretas” estaban pasa a los niveles inferiores del compilador. Esto me mostró qué valores “-D” necesitaba agregar a la sección “defines” de mi configuración y, lo que es más importante, que “-isystem” se estaba usando para establecer el directorio de inclusión del sistema. Terminé con esto en mi c_cpp_properties.json: –
{
"configurations": [
{
"name": "CEVA-V15",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"CEVAXC323",
"XC323_CEVA"
],
"compilerPath": "/devtools/CEVA-ToolBox/V15/CEVA-XC/cevaxccc",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-arm",
"compilerArgs": [
"-isystem /devtools/CEVA-ToolBox/V15/CEVA-XC/include"
]
}
]
}