Configurare la pulizia di inclusione C/C++ in Visual Studio

A partire da 17.8 Preview 1, Visual Studio può ripulire i file #include per migliorare la qualità del codice C e C++ nei seguenti modi:

  • Propone di aggiungere file header al codice che viene compilato solo perché un file header necessario è incluso indirettamente da un altro file header.
  • Offre di rimuovere i file di intestazione inutilizzati, migliorando i tempi di compilazione.

Questo articolo descrive come configurare Includi pulizia in Visual Studio. Per ulteriori informazioni su Include Cleanup, consulta Panoramica di Include Cleanup in C/C++.

Attiva Includi pulizia

La funzionalità Includi pulizia è disattivata per impostazione predefinita.

Attivarlo selezionando Strumenti>Opzioni> Editor >C/C++>Pulizia codice e selezionando Abilita pulizia #include.

Usa quindi gli elenchi a discesa per configurare il livello di gravità delle notifiche relative alla possibilità di aggiungere header indiretti o rimuovere header non utilizzati:

La finestra di dialogo Opzioni è aperta in Editor di testo > C/C++ > Pulizia codice.

La casella di controllo **Abilita pulizia #include** è selezionata. Vengono visualizzati gli elenchi a discesa **Livello di suggerimento per la rimozione delle direttive include non utilizzate** e **Livello di suggerimento per l'aggiunta delle direttive include mancanti**. Vengono visualizzati i contenuti dell'elenco a discesa, che sono: **Solo refactoring**, **Suggerimento**, **Avviso** e **Errore**. L'elenco a discesa **Rimuovi elementi inutilizzati include il livello di suggerimento** offre le stesse opzioni, ma aggiunge anche **Dimmed**.

Queste opzioni controllano il tipo di notifica che la funzionalità Pulizia inclusioni fornisce riguardo ai file di intestazione non utilizzati:

Annuvolato

Include Cleanup mostra i file di intestazione inutilizzati attenuando la riga del file di intestazione inutilizzato nell'editor di codice e tramite un messaggio nella finestra Elenco errori. Nell'editor di codice, passa il cursore sull'elemento #include in grigio per aprire il menu delle azioni rapide e scegli Mostra possibili correzioni, oppure fai clic sul menu a discesa della lampadina per visualizzare le azioni relative al file inutilizzato.

Una schermata di una riga < #include iostream > attenuata.

La riga `#include < iostream >` è attenuata perché la riga di codice che usa iostream è commentata. Tale riga di codice è `// std::cout << "charSize = " << charSize;` Anche per questa riga è visibile il menu delle azioni rapide. Indica che il > iostream #include < non viene usato in questo file e ha un collegamento a Mostra potenziali correzioni.

Solo refactoring: Include Cleanup offre azioni che è possibile eseguire tramite il menu delle azioni rapide nell'editor di codice quando si passa con il puntatore del mouse su #include oppure si posiziona il cursore sulla riga #include e si preme Ctrl+.

Screenshot dell'azione rapida per rimuovere un'intestazione inutilizzata.

Quando si passa il cursore su # include iostream, viene visualizzata una lampadina con il testo che # include iostream non viene usato in questo file".

Suggerimento, avviso, errore: includi pulizia può visualizzare Includi messaggi di pulizia come suggerimenti, avvisi o errori nella finestra Elenco errori . Decidi tu quale. Nello screenshot seguente di Error List, Include Cleanup è configurato per mostrare i file di intestazione non utilizzati con un avviso. Assicurarsi che l'opzione Build + IntelliSense sia selezionata nel filtro a discesa in modo da visualizzare l'output Includi pulizia:

Screenshot della finestra Elenco errori.

Il filtro a discesa è impostato su **Build + IntelliSense**. Un avviso è visibile: VCIC002 - '#include ' non viene usato in questo file."

Attivarlo selezionando Strumenti>Opzioni>Tutte le impostazioni>Linguaggi>C/C++>Pulizia>codice Includi pulizia. Usa i menu a discesa per configurare come vuoi essere informato sulle opportunità di evidenziare le direttive inutilizzate #include, le direttive #include che possono essere ottimizzate (rimosse dopo aver aggiunto direttamente le inclusioni transitive necessarie) e le direttive #include mancanti incluse transitivamente.

Schermata della finestra di dialogo Opzioni di Strumenti aperta su Tutte le impostazioni > Lingue > C/C++ > Pulizia del codice > Pulizia delle direttive include.

Screenshot che mostra gli elenchi a discesa per scegliere come evidenziare un'intestazione inutilizzata nell'editor di codice, quelle che possono essere ottimizzate e quelle che sono incluse in modo transitivo.

Significato delle opzioni:

Annuvolato

Include Cleanup mostra i file di intestazione inutilizzati attenuando la riga del file di intestazione inutilizzato nell'editor di codice e con un messaggio nella finestra Elenco errori. Nell'editor di codice, passa con il cursore sull'elemento #include attenuato per visualizzare il menu delle azioni rapide e scegli Mostra possibili correzioni, oppure fai clic sul menu a discesa della lampadina, per visualizzare le azioni relative al file inutilizzato.

Una schermata di una riga < #include iostream > attenuata.

La riga con `#include ` è attenuata perché la riga di codice che utilizza `iostream` è commentata. Tale riga di codice è `// std::cout << "charSize = " << charSize;`. Il menu azione rapida è visibile anche per questa riga. Indica che "#include " non viene usato in questo file e ha un collegamento a **Mostra potenziali correzioni**.

Nessuno: non eseguire alcuna azione. Include Cleanup offre comunque azioni che è possibile eseguire nell'editor di codice tramite il menu delle azioni rapide quando si passa il puntatore del mouse su #include oppure si posiziona il cursore sulla riga #include e si preme CTRL+.:

Suggerimento, Avviso, Errore: Include Cleanup può visualizzare i messaggi di Include Cleanup come suggerimenti, avvisi o errori nella finestra Elenco errori. Sei tu a decidere quale. Nello screenshot seguente di Elenco errori, Include Cleanup è configurato per mostrare i file di intestazione non utilizzati con un avviso. Assicurarsi che Build + IntelliSense sia selezionato nel filtro a discesa in modo da visualizzare l'output di Include Cleanup:

Screenshot della finestra Elenco errori.

Il filtro a discesa è impostato su **Build + IntelliSense**. Un avviso è visibile: VCIC002 - '#include ' non viene usato in questo file."

Altre opzioni di configurazione

Altre impostazioni includi pulizia sono disponibili in Strumenti>Opzioni> Editor >C/C++>Pulizia codice:

  • Ordina le direttive include: contrassegna le direttive #include che devono essere ordinate. Scegliere il livello di notifica di gravità del messaggio visualizzato nella finestra Elenco errori : Nessuno (funzionalità disattivata ), Suggerimento, Avviso o Errore.
  • Stile: controlla la modalità #include di ordinamento delle istruzioni. Scegli Ignore per ordinare senza considerare lo stile delle parentesi, Quotes per ordinare le inclusioni tra virgolette prima di quelle tra parentesi angolari oppure Angle brackets per ordinare le inclusioni tra parentesi angolari prima di quelle tra virgolette.
  • Con distinzione tra maiuscole e minuscole: quando è selezionata, i confronti per l'ordinamento distinguono tra maiuscole e minuscole nei nomi di file. Se non selezionata, l'ordinamento non fa distinzione tra maiuscole e minuscole.

Screenshot delle opzioni di Visual Studio con filtro avanzato, Ordinamento dopo le modifiche, Ordinamento include, priorità di ordinamento, stile e impostazioni con distinzione tra maiuscole e minuscole evidenziate.

Altre impostazioni includi pulizia sono disponibili inOpzioni>strumenti>Tutte le> delle impostazioni >C/C++>Pulizia codice>Includi pulizia:

  • Filtraggio avanzato: quando è selezionato, se si chiama una funzione membro su un oggetto di una classe derivata ma la funzione è definita nella classe base, lo strumento non suggerisce di aggiungere l'header della classe base. Attivare questa opzione per ridurre i suggerimenti rumorosi quando i simboli usati provengono da classi di base anziché dal tipo a cui si fa riferimento direttamente.
  • Ordina le direttive #include dopo aver apportato eventuali modifiche per la pulizia delle direttive include: se selezionata, la funzionalità predefinita per l'ordinamento delle direttive include viene eseguita dopo qualsiasi azione di pulizia delle direttive include.
  • Formatta le direttive #include dopo aver apportato eventuali modifiche per la pulizia delle direttive include: se selezionata, il comando di formattazione viene eseguito dopo qualsiasi operazione di pulizia delle direttive include.

Schermata di Visual Studio con le opzioni di pulizia degli include e le impostazioni di filtro avanzato, ordinamento e formattazione evidenziate.

Configurare la pulizia delle inclusioni con .editorconfig

La funzionalità Includi pulizia include altre opzioni, ad esempio l'esclusione specificata da suggerimenti di pulizia e indica che alcuni file di intestazione sono necessari in modo che lo strumento non li contrassegni come inutilizzati. Definire queste opzioni in un .editorconfig file. Aggiungere questo file al progetto per applicare stili di codifica coerenti per tutti gli utenti che funzionano nella codebase. Per altre informazioni sull'aggiunta di un .editorconfig file al progetto, vedere Creare impostazioni dell'editor personalizzate portabili con EditorConfig.

Le .editorconfig impostazioni che è possibile utilizzare con Include Cleanup sono:

Impostazione Valori Esempio
cpp_include_cleanup_add_missing_error_tag_type

Imposta il livello di errore per l'aggiunta di messaggi di inclusione transitiva.
none
suggestion
warning
error
cpp_include_cleanup_add_missing_error_tag_type = suggestion
cpp_include_cleanup_alternate_files

Eliminare i messaggi per le include indirette. Ad esempio, se si #include <windows.h> e si utilizza solo il contenuto proveniente dai file di intestazione inclusi indirettamente winerror.h o minwindef.h, lo strumento non suggerisce di aggiungerli.
file1:file2[:file3...][,file4:file5...] cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h
O
cpp_include_cleanup_alternate_files = windows.h:winerror.h:minwindef.h,umbrella.h:internal.h
cpp_include_cleanup_excluded_files

Esclude i file specificati dai messaggi Includi pulizia. Non si riceverà alcun suggerimento correlato all'intestazione, né su come aggiungerla né se è inutilizzata.
filename cpp_include_cleanup_excluded_files = vcruntime.h, vcruntime_string.h
cpp_include_cleanup_remove_unused_error_tag_type

Imposta il livello di errore per rimuovere i messaggi di inclusione inutilizzati.
none
suggestion
warning
error
dimmed
cpp_include_cleanup_remove_unused_error_tag_type = dimmed
cpp_include_cleanup_replacement_files

Sostituisce file1 con file2 durante l'elaborazione di pulizia degli include. Ad esempio, potresti preferire utilizzare cstdio anziché stdio.h. Se si dispone di un file con #include <cstdio> e #include <stdio.h> si utilizza solo il contenuto da stdio.h, con questa impostazione Includi pulizia indicherà di rimuovere stdio.h perché ha sostituito l'utilizzo di cstdio con stdio.h durante l'elaborazione. Se non utilizzi i contenuti di entrambi, Include Cleanup ti dirà di rimuoverli entrambi.
file1:file2 cpp_include_cleanup_replacement_files = stdio.h:cstdio,stdint.h:cstdint
cpp_include_cleanup_required_files

Specificare che l'utilizzo di file1 richiede file2. Ad esempio, specificare che, se si usa atlwin.h, deve essere incluso anche altbase.h.
file1:file2 cpp_include_cleanup_required_files = atlwin.h:altbase.h, atlcom.h:altbase.h
cpp_sort_includes_error_tag_type

Imposta il livello di errore dei messaggi di sort-includes. none disattiva la funzionalità. suggestion mostra una ... sottolineatura a zigzag e aggiunge un messaggio all'elenco degli errori. warning mostra una linea ondulata verde e aggiunge un avviso. error mostra una sottolineatura rossa ondulata e segnala un errore.
none
suggestion
warning
error
cpp_sort_includes_error_tag_type = suggestion
cpp_sort_includes_priority_case_sensitive

Quando true, i confronti di ordinamento includono i nomi dei file in modo sensibile alle maiuscole/minuscole. Quando false, l'ordinamento non fa distinzione tra maiuscole e minuscole.
true
false
cpp_sort_includes_priority_case_sensitive = false
cpp_sort_includes_priority_style

Determina se l'ordinamento tiene conto dello stile delle parentesi. ignore ordina senza considerare le parentesi. quoted l'ordinamento tra virgolette include sopra parentesi angolari. angle_brackets ordina le inclusioni tra parentesi angolari prima di quelle tra virgolette.
ignore
quoted
angle_brackets
cpp_sort_includes_priority_style = quoted

Le impostazioni seguenti sono disponibili a partire da Visual Studio 2026:

Impostazione Valori Esempio
cpp_include_cleanup_format_after_edits

Se impostato su true, esegue il comando di formattazione dopo qualsiasi azione Include Cleanup. Utile quando il formato clang è configurato per ordinare le #include direttive.
true
false
cpp_include_cleanup_format_after_edits = true
cpp_include_cleanup_sort_after_edits

Quando true, esegue la funzionalità integrata di ordinamento delle inclusioni dopo qualsiasi azione di pulizia delle inclusioni. Utile quando non si usa il formato clang per ordinare le #include direttive.
true
false
cpp_include_cleanup_sort_after_edits = true

Eliminare i messaggi di inclusione inutilizzati tramite codice

A partire da Visual Studio 2026, è possibile eliminare i messaggi Includi pulizia in una singola #include direttiva aggiungendo un // VCIC-Excluded commento alla stessa riga. Lo strumento di pulizia degli include non suggerisce di rimuovere quell'include, anche se sembra non utilizzato. Fornire testo di giustificazione facoltativo dopo l'indicatore in modo che i lettori futuri sappiano perché l'inclusione è presente:

#include "Header2.h" // VCIC-Excluded: needed for the ATL macros used below

È anche possibile usare il menu della lampadina per aggiungere il commento // VCIC-Excluded a una direttiva #include. Assicurarsi che Pulizia degli include sia attivata tramite Strumenti>Opzioni>Tutte le impostazioni>Linguaggi>C/C++>Pulizia del codice>Pulizia degli include, poiché è disattivata per impostazione predefinita. Passare quindi il cursore sulla #include riga, selezionare Altre correzioni>Elimina VCIC002 in source::

Schermata di Visual Studio con il menu della lampadina che mostra Sopprimi VCIC002 nel codice sorgente.

Il // VCIC-Excluded commento si applica solo a #include per il file. L'impostazione cpp_include_cleanup_excluded_files in .editorconfig applica tale esclusione in ogni file disciplinato da .editorconfig.

Vedi anche

Panoramica della pulizia degli include C/C++
Includi messaggi di pulizia