microsoft / microsoft/vscode-cpptools
Issue with includes when they are defined by preprocessor macros
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- TypeScript
- Estrellas
- 6.2k
- Forks
- 1.7k
- Merge medio
- 14 h 46 min
- PR fusionados (30 d)
- 61
Descripción
Type: LanguageService
Describe the bug
- OS and Version: Windows 10 1909, 18363.752
- VS Code Version: 1.43.2 user setup
- C/C++ Extension Version: 0.27.0
- Other extensions you installed (and if the issue persists after disabling them):
- Does this issue involve using SSH remote to run the extension on a remote machine?:
- When I use the preprocessor to define a header to include, and that header file is in a different folder, Intellisense seems unable to find it, even though said folder is correctly included in the C/C++ config file
Steps to reproduce
I attach a zip file with a workspace where the issue can be reproduced. It's the bare minimum to make it appear. It contains a base folder with one .c (main.c) file and two headers (header1.h and header2.h), and a subfolder with another .c file (anotherfile.c), where the issue is present. New folder.zip
Project
├── main.c
├── header1.h
└── header2.h
. └── Test
. └── anotherFile.c
- Create a header in a folder (header1.h)
- Create a .c file in a different folder (anotherFile.c in Test)
- AnotherFile.c must have an include determined by a preprocessor directive:
#include HEADER_NAME - Use the C/C++ Properties file to give a value to that preprocessor Macro:
"HEADER_NAME=\"header1.h\"" - See additional context to see on which situations the issue is fixed.
Expected behavior
As header1.h is in my includePath, I expect it to find header1.h
Logs
-------- Diagnostics - 07/04/2020, 11:24:20
Version: 0.27.0
Current Configuration:
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"HEADER_NAME=header1.h"
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64",
"compilerArgs": [],
"cStandard": "c99",
"browse": {
"path": [
"${workspaceFolder}/**"
],
"limitSymbolsToIncludedHeaders": true
}
}
Translation Unit Mappings:
[ C:\Users\joel.santos\New folder\test\anotherfile.c ]:
C:\USERS\JOEL.SANTOS\NEW FOLDER\TEST\ANOTHERFILE.C
Translation Unit Configurations:
[ C:\Users\joel.santos\New folder\test\anotherfile.c ]:
Process ID: 26344
Memory Usage: 11 MB
Compiler Path: C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe
Includes:
C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO\2017\BUILDTOOLS\VC\TOOLS\MSVC\14.16.27023\INCLUDE
C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.17763.0\UM
C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.17763.0\UCRT
C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.17763.0\SHARED
C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.17763.0\WINRT
C:\PROGRAM FILES (X86)\WINDOWS KITS\10\INCLUDE\10.0.17763.0\CPPWINRT
C:\USERS\JOEL.SANTOS\NEW FOLDER
Defines:
_DEBUG
UNICODE
_UNICODE
HEADER_NAME=header1.h
Standard Version: c99
IntelliSense Mode: msvc-x64
Total Memory Usage: 11 MB
Screenshots
Additional context
There are a number of situations where the issue disappears. For example, if I include another header on the same directory than the one that "can't be found", Intellisense can find the header. See anotherFile.c, there's a commented include. If that line is uncommented, Intellisense can find header1.h
Also, if I define the relative path to the header in the macro, Intellisense can find the header:
"defines": [
[...]
"HEADER_NAME=\"..\header1.h\"" //This works
[...]
],
My c_cpp_properties.json:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"HEADER_NAME=\"header1.h\""
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Reproduce el problema usando main.c, header1.h, header2.h, Test/anotherFile.c y el c_cpp_properties.json o espacio de trabajo ZIP proporcionado. Comienza ejecutando C/C++: Log Diagnostics y compara los casos de include expandidos por macros con y sin la ruta relativa. Se considera terminado cuando IntelliSense resuelve header1.h desde includePath al expandirse HEADER_NAME a su nombre.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, cpp, typescript, vscode
- Área
- devtools, tooling
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100