Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Počínaje verzí Visual Studio 17.8 Preview 1 poskytuje #include Visual Studio funkci čištění, která zlepšuje kvalitu kódu následujícími způsoby:
Visual Studio poskytuje #include funkci čištění, která zlepšuje kvalitu kódu následujícími způsoby:
- Nabízí přidání souborů hlaviček pro kód, který se zkompiluje pouze proto, že potřebný hlavičkový soubor je nepřímo zahrnut jiným hlavičkovým souborem.
- Nabízí odebrání nepoužívaných souborů hlaviček, což zlepšuje časy sestavení a čistotu kódu.
Možnost zahrnout vyčištění je ve výchozím nastavení vypnutá. Informace o tom, jak ho nakonfigurovat, najdete v tématu Konfigurace C/C++ Include Cleanup v sadě Visual Studio.
Přímá vs. nepřímá záhlaví
Terminologie:
- Přímá hlavička je hlavička, kterou explicitně
#includev kódu používáte. - Nepřímá hlavička je zahrnuta, protože ji obsahuje hlavička, kterou zahrnete přímo. Můžete také říci, že je zahrnuta
transitivelynepřímá hlavička .
Include Cleanup analyzuje váš kód a určuje, které hlavičkové soubory se nepoužívají a které jsou zahrnuty nepřímo. Podívejte se na následující hlavičkový soubor:
// myHeader.h
#include <string>
#include <iostream>
void myFunc()
{
std::string s = "myFunc()\n";
std::cout << s;
}
A program, který ho používá:
// myProgram.cpp
#include "myHeader.h"
int main()
{
std::string s = "main()"; // string is indirectly included by myHeader.h
std::cout << s; // cout is indirectly included by myHeader.h
myFunc();
}
myHeader.h je přímá hlavička, protože myProgram.cpp ji explicitně obsahuje.
myHeader.h obsahuje <string> a <iostream>, takže se jedná o nepřímé hlavičky.
Problém je, že myProgram.cpp používá std::string a std::cout, ale neobsahuje přímo hlavičky, které je definují. Tento kód se zkompiluje, protože myHeader.h obsahuje tyto hlavičky. Tento kód je křehký, protože kdyby myHeader.h někdy přestal zahrnovat kteroukoli z nich, myProgram.cpp už by nešel zkompilovat.
Podle doporučení pro C++ je lepší explicitně uvádět hlavičkové soubory pro všechny své závislosti, aby váš kód nebyl náchylný k problémům způsobeným změnami v hlavičkových souborech. Další informace o této směrnici naleznete v #include v dokumentu C++ Core Guidelines.
Include Cleanup analyzuje váš kód a identifikuje nepoužívané a nepřímo zahrnuté hlavičkové soubory. Poskytuje zpětnou vazbu na základě nastavení popsaných v dokumentu Konfigurace nástroje C++ #include v aplikaci Visual Studio. Zpětná vazba má podobu upozornění a návrhů v seznamu chyb. Další informace o zpětné vazbě poskytované funkcí Include Cleanup naleznete v tématu Zprávy Include Cleanup.
Nepoužité hlavičky
S vývojem kódu už možná nebudete potřebovat nějaké hlavičkové soubory. V komplexním projektu je obtížné sledovat tyto hlavičky. Sestavení v průběhu času můžou trvat déle, protože kompilátor zpracovává nepotřebné soubory hlaviček.
Include Cleanup vám pomůže najít a odebrat nepoužívané hlavičkové soubory. Například co když zakomentujete myFunc() v myProgram.cpp:
// myProgram.cpp
#include "myHeader.h"
int main()
{
std::string s = "main()"; // string is indirectly included from myHeader.h
std::cout << s; // cout is indirectly included from myHeader.h
// myFunc(); // directly included from myHeader.h
}
Na následujícím snímku obrazovky je #include "myHeader.h" zobrazen šedě (nastavení popsané v článku Konfigurace nástroje C++ #include v aplikaci Visual Studio), protože už není potřeba, jelikož myFunc() je zakomentován.
Najeďte kurzorem na ztmavený prvek #include a zobrazíte nabídku rychlých akcí. Pokud chcete zobrazit akce související s nepoužívaným souborem, vyberte žárovku (nebo zvolte odkaz Zobrazit potenciální opravy ):
Přidat transitivně používané hlavičkové soubory
Můžete se rozhodnout odebrat nepoužívaný hlavičkový soubor, ale tím se kód poruší, protože <string> a <iostream> jsou nepřímo zahrnuty souborem myheader.h.
Místo toho můžeme zvolit Přidat všechny transitivně používané a odebrat všechny nepoužívané #include. Tím se odebere nepoužívaná hlavička myHeader.h, ale přidá se také všechna použitá záhlaví, která jsou nepřímo zahrnuta prostřednictvím myHeader.h. Výsledkem je v tomto případě přidání #include <string> a #include <iostream> k myProgram.cpp a odstranění #include "myHeader.h":
// myProgram.cpp
#include <iostream>
#include <string>
int main()
{
std::string s = "main()"; // string is directly included from <string>
std::cout << s; // cout is directly included from <string>
// MyFunc();
}
Nástroj neaktualizuje komentáře, ale můžete vidět, že kód teď používá std::string a std::cout přímo. Tento kód už není tak křehký, protože nespoléhá na myHeader.h, že zahrne další požadované hlavičky.
Osvědčený postup
Neodstraňujte zdánlivě nepoužívané hlavičkové soubory, aniž byste nejprve doplnili nepřímo zahrnuté hlavičkové soubory. Váš kód může záviset na nepřímých zahrnutích do souboru hlavičky, který se jinak nepoužívá. Nejprve přidejte tranzitivně používané hlavičky. Když pak odeberete nepoužívané hlavičky, nezískáte chyby kompilace kvůli chybějícím souborům hlaviček, které jsou nepřímo zahrnuté souborem záhlaví, který jste odebrali.
Jedním ze způsobů, jak to udělat, je:
- Nastavte možnost Vyčištění zahrnutí pro Úroveň návrhů pro přidání chybějících direktiv include na Návrh (Nástroje>Možnosti>Textový editor>C/C++>Vyčištění kódu).
- Nastavte možnost Odebrat nepoužité položky včetně úrovně návrhu na návrh.
Jedním ze způsobů, jak to udělat, je:
- Nastavte rozevírací seznam u nastavení Vyčištění direktiv include pro Zvolte, jak zvýrazňovat chybějící příkazy #include, které jsou zahrnuty transitivně na Návrh (Nástroje>Možnosti>Všechna nastavení>Jazyky>C/C++>Vyčištění kódu>Vyčištění direktiv include).
- Nastavte Zvolte, jak zvýrazňovat nepoužívané direktivy #include na Návrh.
Potom:
- V seznamu chyb se ujistěte, že je filtr nastavený na Build + IntelliSense.
- Vyhledejte případy, kdy se v tomto souboru používá obsah z #include x a je transitivně zahrnut.
- Najeďte ukazatelem myši na řádek s návrhem. V rozevírací nabídce ikony žárovky vyberte Přidat všechny tranzitivně používané include soubory.
- Opakujte tyto kroky v projektu, dokud nebudou vyřešeny všechny návrhy týkající se přechodných zahrnutí.
- Odeberte nepoužívané direktivy include: v seznamu chyb vyhledejte výskyt „#include x is not used in this file.“
- Najeďte kurzorem na nepoužívané záhlaví. V rozevíracím seznamu žárovky vyberte Odebrat všechny nepoužité zahrnutí.
- Opakujte tyto kroky v projektu, dokud nebudou vyřešeny všechny návrhy pro vyčištění.
V tomto stručném přehledu jste viděli, jak vám může Vyčištění zahrnutí pomoci odebrat nepoužívané soubory záhlaví a přidat soubory záhlaví, které byly zahrnuty nepřímo. Tento proces vám pomůže udržet kód čistý, může urychlit sestavení a snížit náchylnost kódu k poruchám.
Viz také
Nakonfigurujte vyčištění direktiv include jazyka C/C++ ve Visual Studiu
Zahrnout zprávy o vyčištění