Condividi tramite


Configurare un progetto C++ per IntelliSense

In alcuni casi, potrebbe essere necessario configurare manualmente il progetto C++ per ottenere il corretto funzionamento di IntelliSense. Per i progetti MSBuild (in base ai file di .vcxproj), è possibile modificare le impostazioni nelle proprietà del progetto. Per i progetti non MSBuild, è possibile modificare le impostazioni nel file CppProperties.json nella directory radice del progetto. In alcuni casi, potrebbe essere necessario creare un file di hint per consentire a IntelliSense di comprendere le definizioni di macro. L'IDE di Visual Studio consente di identificare e risolvere i problemi di IntelliSense.

IntelliSense a file singolo

Quando si apre un file che non è incluso in un progetto, Visual Studio fornisce il supporto di IntelliSense, ma per impostazione predefinita non vengono visualizzati squiggle di errore. Se la barra di navigazione indica File vari, questo probabilmente spiega perché non vengono visualizzati ondulati di errore sotto il codice non corretto o perché non è definita una macro del preprocessore.

Controllare l'elenco degli errori

Se un file non è aperto in modalità file singolo e IntelliSense non funziona correttamente, la prima posizione da controllare è la finestra Elenco errori. Per visualizzare tutti gli errori di IntelliSense per il file di origine corrente insieme a tutti i file di intestazione inclusi, scegliere Build + IntelliSense nell'elenco a discesa:

IntelliSense VC++ nell'elenco degli errori

IntelliSense produce un massimo di 1000 errori. Se ci sono più di 1000 errori nei file di intestazione inclusi in un file di origine, il file di origine mostra solo una singola sottolineatura ondulata di errore all'inizio del file.

Assicurarsi che i percorsi di #include siano corretti

Progetti MSBuild

Se si eseguono le compilazioni all'esterno dell'IDE di Visual Studio e le compilazioni hanno esito positivo, ma IntelliSense non è corretto, è possibile che la riga di comando non sia sincronizzata con le impostazioni del progetto per una o più configurazioni. Fare clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e assicuratevi che tutti i percorsi #include siano corretti per la configurazione e la piattaforma attuali. Se i percorsi sono identici in tutte le configurazioni e le piattaforme, è possibile selezionare Tutte le configurazioni e Tutte le piattaforme e quindi verificare che i percorsi siano corretti.

directory di inclusione di VC++

Per visualizzare i valori correnti per le macro di compilazione, ad esempio VC_IncludePath, selezionare la linea Include Directories e fare clic sul menu a discesa a destra. Quindi scegliere <Modifica> e fare clic sul pulsante Macro.

Progetti Makefile

Per i progetti Makefile basati sul modello di progetto NMake, scegliere NMake nel riquadro sinistro e quindi scegliere Includi percorso di ricerca nella categoria IntelliSense.

progetto Makefile includono percorsi

Apri la cartella dei progetti

Per i progetti CMake, i percorsi di #include devono essere specificati correttamente per tutte le configurazioni in CMakeLists.txt. Altri tipi di progetto potrebbero richiedere un file CppProperties.json. Per altre informazioni, vedere Configurare IntelliSense con CppProperties.json. Assicurarsi che i percorsi siano corretti per ogni configurazione definita nel file.

Se si verifica un errore di sintassi nel file CppProperties.json, IntelliSense nei file interessati non sarà corretto. Visual Studio visualizzerà l'errore nella finestra di output.

Problemi nel parser di tag

Il tag parser è un parser C++ "fuzzy" utilizzato per la ricerca e la navigazione. È molto veloce ma non tenta di comprendere completamente ogni costrutto di codice.

Ad esempio, non valuta le macro del preprocessore e pertanto può analizzare in modo errato il codice che ne fa uso elevato. Quando il parser tag rileva un costrutto di codice non noto, può ignorare l'intera area di codice.

Esistono due modi comuni in cui questo problema si manifesta in Visual Studio:

  1. Se la barra di spostamento mostra una macro più interna, la definizione della funzione corrente è stata ignorata:

    tag parser ignora la definizione di funzione

  2. L'IDE offre la creazione di una definizione di funzione per una funzione già definita:

    parser tag consente di definire la funzione esistente

Per risolvere questi tipi di problemi, aggiungere un file denominato cpp.hint alla radice della directory della soluzione. Per ulteriori informazioni, vedere File di suggerimenti.

Gli errori del parser tag appaiono nella finestra Elenco Errori.

Validare le impostazioni del progetto con la registrazione diagnostica

Per verificare se il compilatore IntelliSense utilizza le opzioni del compilatore corrette, inclusi i percorsi di inclusione e le macro del preprocessore, attivare la registrazione diagnostica delle righe di comando di IntelliSense in Tools > Opzioni > Editor di testo > C/C++ > Avanzate > Registrazione diagnostica. Impostare Abilitare la Registrazione su True, Livello di Registrazione su 5 (massima verbosità) e Filtro di Registrazione su 8 (registrazione IntelliSense).

La finestra di output mostrerà ora le righe di comando passate al compilatore IntelliSense. Ecco un output di esempio:

[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h

Queste informazioni possono essere utili per capire perché IntelliSense fornisce informazioni non accurate. Ad esempio, se la directory Include del progetto contiene $(MyVariable)\Includee il log di diagnostica mostra /I\Include come percorso di inclusione, significa che $(MyVariable) non è stato valutato ed è stato rimosso dal percorso di inclusione finale.

Informazioni sul build di IntelliSense

Visual Studio usa un compilatore C++ dedicato per creare e gestire il database che supporta tutte le funzionalità di IntelliSense. Per mantenere sincronizzato il database IntelliSense con il codice, Visual Studio avvia automaticamente le compilazioni di Solo IntelliSense come attività in background in risposta a determinate modifiche apportate alle impostazioni del progetto o ai file di origine.

Tuttavia, in alcuni casi Visual Studio potrebbe non aggiornare il database IntelliSense in modo tempestivo. Ad esempio, quando si esegue un git pull o si esegue un git checkout, Visual Studio può richiedere fino a un'ora per rilevare le modifiche nei file. È possibile forzare una nuova analisi di tutti i file in una soluzione facendo clic con il pulsante destro del mouse sul nodo del progetto in Esplora soluzioni e scegliendo Riprova soluzione.

Risoluzione degli errori di compilazione di IntelliSense

Una compilazione IntelliSense non produce binari, ma può comunque non riuscire. Una possibile causa di errore sono i file .props o .targets personalizzati. In Visual Studio 2017 versione 15.6 e successive, gli errori di compilazione relativi solo a IntelliSense vengono registrati nella finestra di Output. Per visualizzarli, impostare Mostra output da su Soluzione:

La finestra di output per gli errori della soluzione

Il messaggio di errore potrebbe indicare di abilitare il tracciamento durante la progettazione.

error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.

Se si imposta la variabile di ambiente TRACEDESIGNTIME su true e si riavvia Visual Studio, verrà visualizzato un file di log nella directory %TEMP%, che potrebbe aiutare a diagnosticare l'errore di compilazione.

Per altre informazioni sulla variabile di ambiente TRACEDESIGNTIME, vedere Roslyn e Common Project System. Le informazioni contenute in questi articoli sono rilevanti per i progetti C++.