Udostępnij za pośrednictwem


Edytowanie i refaktoryzacja kodu C++ w programie Visual Studio

Program Visual Studio udostępnia kilka narzędzi, które ułatwiają pisanie, edytowanie i refaktoryzację kodu.

IntelliSense

IntelliSense to zaawansowane narzędzie do uzupełniania kodu, które sugeruje symbole i fragmenty kodu podczas wpisywania. Funkcja IntelliSense języka C++ w programie Visual Studio działa w czasie rzeczywistym, analizując bazę kodu podczas aktualizowania jej i dostarczania zaleceń. Podczas wpisywania większej liczby znaków lista zalecanych wyników jest zawężana.

Zrzut ekranu przedstawiający listę rozwijaną listy C plus elementów członkowskich z metodami dostępnymi dla ciągów, takich jak dołączanie, przypisywanie itd.

Niektóre symbole są pomijane automatycznie, aby ułatwić zawężenie wyników. Na przykład podczas uzyskiwania dostępu do składowych obiektu klasy spoza klasy nie będzie można domyślnie wyświetlać prywatnych składowych ani chronionych składowych (jeśli nie jesteś w kontekście klasy podrzędnej). Filtrowanie można dostosować przy użyciu przycisków znajdujących się u dołu.

Po wybraniu symbolu z listy rozwijanej można ją automatycznie uzupełnić za pomocą Tab, Enter lub jednego z innych znaków zatwierdzenia (domyślnie: { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Aby dodać lub usunąć znaki z tej listy, wyszukaj ciąg "IntelliSense" w obszarze Szybkie uruchamianie (Ctrl + Q) i wybierz opcję Edytor > tekstów C/C++ > Advanced . Opcja Znaki zatwierdzenia listy elementów członkowskich umożliwia dostosowanie listy przy użyciu żądanych zmian.

Opcja Tryb filtru listy elementów członkowskich określa, jakie rodzaje sugestii autouzupełniania funkcji IntelliSense są widoczne. Domyślnie jest ustawiona wartość Rozmyte. W wyszukiwaniu rozmytym, jeśli masz symbol o nazwie MyAwesomeClass, możesz wpisać "MAC" i znaleźć klasę w sugestiach autouzupełniania. Algorytm rozmyty ustawia minimalny próg, który symbole muszą spełniać, aby wyświetlić się na liście. Filtrowanie inteligentne wyświetla wszystkie symbole zawierające podciąg, które pasują do wpisanych elementów. Filtrowanie prefiksów wyszukuje ciągi rozpoczynające się od wpisanych elementów.

Aby uzyskać więcej informacji na temat funkcji IntelliSense języka C++, zobacz Visual C++ IntelliSense i Configure a C++ project for IntelliSense (Konfigurowanie projektu języka C++ dla funkcji IntelliSense).

IntelliCode

IntelliCode to funkcja IntelliSense wspomagana przez sztuczną inteligencję. Umieszcza najbardziej prawdopodobnego kandydata na początku listy uzupełniania. Rekomendacje funkcji IntelliCode są oparte na tysiącach projektów open source w usłudze GitHub z ponad 100 gwiazdkami. W połączeniu z kontekstem kodu lista uzupełniania jest dostosowana do promowania typowych rozwiązań.

Podczas pisania języka C++funkcja IntelliCode pomoże w korzystaniu z popularnych bibliotek, takich jak biblioteka standardowa języka C++. Kontekst kodu służy do pierwszego udostępnienia najbardziej przydatnych zaleceń. W poniższym przykładzie funkcja składowa size jest często używana z funkcją sort , więc jest ona uwidoczniena na początku listy wyników.

Zrzut ekranu przedstawiający listę rozwijaną C plus IntelliCode, która pokazuje składowe klasy wektorów posortowane według najczęściej używanych w kodzie.

W programach Visual Studio 2022 i Visual Studio 2019 intelliCode jest dostępny jako składnik opcjonalny w obciążeniu Programowanie aplikacji klasycznych języka C++. Aby upewnić się, że funkcja IntelliCode jest aktywna dla języka C++, przejdź do pozycji Narzędzia>Opcje>funkcji IntelliCode>Ogólne i ustaw model podstawowy języka C++ na wartość Włączone.

W programie Visual Studio 2017 funkcja IntelliCode jest dostępna jako rozszerzenie w witrynie Visual Studio Marketplace.

Predykcyjna funkcja IntelliSense (eksperymentalna)

Predykcyjna funkcja IntelliSense to funkcja eksperymentalna, która używa rozpoznawania kontekstowego w celu ograniczenia liczby wyników wyświetlanych na liście rozwijanej Funkcji IntelliSense. Algorytm stosuje dopasowanie typu, tak aby pokazywał tylko te wyniki zgodne z oczekiwanym typem. W najprostszym przypadku, jeśli wpiszesz int x = i wywołasz listę rozwijaną IntelliSense, zobaczysz tylko liczby całkowite lub funkcje zwracające liczby całkowite. Ta funkcja jest domyślnie wyłączona, ponieważ jest ona nadal opracowywana. Działa najlepiej z symbolami globalnymi; funkcje członkowskie nie są jeszcze obsługiwane. Możesz ją włączyć, wpisując "Predykcyjne" w obszarze Szybkie uruchamianie lub przechodząc do pozycji Narzędzia>Opcje>Edytor>tekstu C/C++>Eksperymentalna>funkcja IntelliSense włączania predykcyjnego.

Aby zastąpić funkcję IntelliSense predykcyjną i wyświetlić dłuższą listę, naciśnij Ctrl + J. Jeśli funkcja Predykcyjna funkcja IntelliSense jest włączona, wywołanie Ctrl + J spowoduje usunięcie filtru predykcyjnego. Naciśnięcie Ctrl + J ponownie usuwa filtr ułatwień dostępu z wyników listy elementów członkowskich, jeśli ma to zastosowanie. Przycisk ([+]) pod listą rozwijaną Funkcji IntelliSense wykonuje to samo, co Ctrl + J. Zatrzymaj wskaźnik myszy na przycisku, aby wyświetlić informacje o wyświetlanych etykietkach narzędzi.

Zrzut ekranu przedstawiający język C plus z funkcją IntelliSense predykcyjną.

Powyższy zrzut ekranu przedstawia kilka przycisków na liście rozwijanej. Umożliwiają one filtrowanie funkcji IntelliSense dla różnych rodzajów wyników:

  • Zmienne i stałe
  • Funkcje
  • Typy
  • Makra
  • Wyliczenia
  • Przestrzenie nazw

Przycisk jest wyświetlany tylko wtedy, gdy jest odpowiedni dla bieżącej sesji funkcji IntelliSense. Zazwyczaj nie widać wszystkich przycisków jednocześnie.

Funkcja IntelliSense szablonu

Pasek szablonu to element interfejsu użytkownika wyświetlany, gdy kursor znajduje się w definicji szablonu. Jest to przydatne, ponieważ można podać przykładowe argumenty szablonu dla funkcji IntelliSense, które będą wyświetlane podczas edytowania treści szablonu. Można na przykład określić, że argument szablonu ma typ std::vector<int>. Następnie, gdy używasz tego argumentu w treści szablonu, zobaczysz elementy członkowskie std::vector<int>w funkcji IntelliSense.

Zrzut ekranu przedstawiający pasek szablonu z wyróżnioną opcją Dodaj wszystkie istniejące wystąpienia.

Kliknij ikonę <T>, aby rozwinąć/zwinąć pasek szablonu. Kliknij ikonę ołówka lub kliknij dwukrotnie pasek szablonu, aby otworzyć okno Edycja , w którym określisz typy argumentów dla parametrów.

Zrzut ekranu przedstawiający środowisko edycji na pasku szablonu, na którym wprowadzasz typ dla każdego parametru szablonu.

Pasek szablonu może automatycznie wypełniać typy parametrów na podstawie wystąpień szablonu w kodzie. Kliknij pozycję Dodaj wszystkie istniejące wystąpienia , aby wyświetlić listę wszystkich konkretnych argumentów, które zostały użyte do utworzenia wystąpienia szablonu w całej bazie kodu.

Zrzut ekranu przedstawiający listę wyników funkcji IntelliSense szablonu z różnymi typami używanymi do tworzenia wystąpienia parametru szablonu C, takiego jak C = AmbientLight, C = Świeca i inne.

Okno w dolnej części edytora pokazuje, gdzie znaleziono każde wystąpienie i jakie były jego argumenty. Możesz wybrać wystąpienie, aby przejść do lokalizacji w kodzie, w której znaleziono wystąpienie.

Zrzut ekranu przedstawiający listę wystąpień szablonu w kodzie. Wyświetlane są wystąpienia, plik, lokalizacja i argumenty.

Informacje o pasku szablonu są specyficzne dla użytkownika. Jest on przechowywany w folderze .vs i nie jest zatwierdzony do kontroli źródła.

Błędy zygzaki i szybkie poprawki

Jeśli edytor wykryje problemy z kodem, doda kolorowe zygzaki w ramach problemu. Czerwone zygzaki wskazują kod, który nie zostanie skompilowany. Zielone ziele wskazują na inne rodzaje problemów, które nadal mogą być potencjalnie poważne. Możesz otworzyć okno Lista błędów, aby uzyskać więcej informacji o problemach.

W przypadku niektórych rodzajów błędów i typowych wzorców kodowania edytor zaoferuje szybką poprawkę w postaci żarówki wyświetlanej po umieszczeniu wskaźnika myszy na przełączniku. Kliknij strzałkę w dół, aby wyświetlić sugestie.

W poniższym przykładzie został zadeklarowany, vector ale nie znaleziono definicji, więc edytor oferuje dołączenie niezbędnego pliku nagłówka:

Zrzut ekranu przedstawiający błąd i proponowaną szybką poprawkę w pliku # include vector.

Edytor oferuje również szybkie poprawki dla niektórych możliwości refaktoryzacji. Jeśli na przykład zadeklarujesz klasę w pliku nagłówkowym, program Visual Studio zaoferuje utworzenie dla niej definicji w osobnym pliku .cpp.

Zrzut ekranu przedstawiający szybką poprawkę z wyróżnioną opcją Create definition of Channel Route Iterator in channels dot C P P option (Tworzenie definicji iteratora trasy kanału w kanałach) dot C P P.

Śledzenie zmian

Za każdym razem, gdy wprowadzisz zmianę w pliku, żółty pasek pojawi się po lewej stronie, aby wskazać, że wprowadzono niezapisane zmiany. Po zapisaniu pliku pasek zmieni kolor na zielony. Zielone i żółte słupki są zachowywane tak długo, jak dokument jest otwarty w edytorze. Reprezentują one zmiany wprowadzone od czasu ostatniego otwarcia dokumentu.

Zrzut ekranu przedstawiający język C plus i śledzenie zmian. Żółty pasek w dół po lewej stronie wskazuje zmiany.

Przenoszenie kodu

Możesz przenosić wiersze kodu w górę i w dół, zaznaczając je, trzymając wciśnięty Alt i naciskając strzałek w górę/w dół.

Wstaw fragmenty kodu

Fragment kodu jest wstępnie zdefiniowanym fragmentem kodu źródłowego. Kliknij prawym przyciskiem myszy pojedynczy punkt lub zaznaczony tekst i wybierz pozycję Fragment kodu, aby wstawić fragment kodu lub otoczyć zaznaczony tekst fragmentem kodu. Poniższa ilustracja przedstawia trzy kroki otaczania wybranej instrukcji pętlą for. Żółte wyróżnienia na końcowym obrazie to pola edytowalne, do których uzyskujesz dostęp za pomocą tabulacji. Aby uzyskać więcej informacji, zobacz Fragmenty kodu.

Zrzut ekranu przedstawiający kontrolkę Wstaw fragment kodu z listy rozwijanej.

Wybrana jest funkcja. Na liście rozwijanej wyświetlanej po kliknięciu prawym przyciskiem myszy nazwy funkcji Otocz z... jest wyróżniony kolorem żółtym. Na liście rozwijanej Otocz z: zaznaczono fragment kodu dla pętli "for". Powoduje to umieszczenie pętli for wokół funkcji. Zmienna i limit pętli są wyświetlane w kolorze żółtym, aby wskazać, że są to pola edytowalne.

Dodaj klasę

Dodaj nową klasę z menu Project lub z menu kontekstowego w Eksplorator rozwiązań:

Zrzut ekranu przedstawiający okno dialogowe Dodawanie nowej klasy. Zawiera pola dla nazwy klasy, ułatwień dostępu, plików do umieszczenia deklaracji i implementacji itd.

Możesz również użyć Kreatora klas, aby zmodyfikować lub zbadać istniejącą klasę.

Zrzut ekranu Kreatora klas, który zawiera opcje dodawania metod, zmiennych składowych i wiele innych.

Aby uzyskać więcej informacji, zobacz Dodawanie funkcji za pomocą kreatorów kodu (C++).

Refaktoryzacja

Refaktoryzacje są dostępne w menu kontekstowym Szybkie działanie lub klikając żarówkę w edytorze. Niektóre znajdują się również w menu Edytuj > refaktoryzację . Do tych funkcji należą:

Wymuszanie stylu kodu za pomocą narzędzi ClangFormat i EditorConfig

Program Visual Studio 2017 lub nowszy jest wyposażony we wbudowaną obsługę formatu ClangFormat, popularnego narzędzia formatowania kodu dla języka C++ opartego na języku Clang/LLVM. Wpisz ciąg "ClangFormat" w obszarze Szybkie uruchamianie , aby ustawić go tak, aby używał jednego z następujących typowych formatów:

  • MASZYNA WIRTUALNA LLVM
  • Google
  • Chrom
  • Mozilla
  • Zestaw webkit
  • Visual Studio

Możesz również podać własne .clang-format lub _clang-format plik, aby zastosować reguły niestandardowe do wszystkich plików kodu na tym samym poziomie lub poniżej.

Pliki można łatwo udostępniać za pośrednictwem kontroli źródła, dzięki czemu można wymusić konwencje kodowania w całym zespole deweloperów.

Zrzut ekranu przedstawiający plik w formacie clang zawierający wiele opcji, takich jak limit kolumny, szerokość wcięcia, szerokość tabulatora itd.

Program Visual Studio 2017 lub nowszy obsługuje również narzędzie EditorConfig, które działa w podobny sposób. Format ClangFormat ma jednak więcej opcji stylu niż EditorConfig, w tym reguły specyficzne dla języka C++. Za pomocą polecenia EditorConfig można tworzyć pliki .editorconfig i umieszczać je w różnych folderach bazy kodu, aby określić style kodu dla tych folderów i ich podfolderów. Plik .editorconfig zastępuje wszystkie inne pliki .editorconfig w folderach nadrzędnych i zastępuje wszystkie ustawienia formatowania skonfigurowane za pomocą opcji narzędzi>. Możesz ustawić reguły dla kart i spacji, rozmiar wcięcia i nie tylko. Aby uzyskać więcej informacji, zobacz Create portable, custom editor settings with EditorConfig (Tworzenie przenośnych, niestandardowych ustawień edytora za pomocą polecenia EditorConfig).

Inne opcje formatowania

Pole wyszukiwania Szybkie uruchamianie zapewnia najszybszy sposób znajdowania ustawienia lub narzędzia. Znajduje się on w menu głównym. Po prostu zacznij wpisywać, a lista autouzupełniania będzie filtrować wyniki.

Zrzut ekranu przedstawiający pole wyszukiwania Szybkie uruchamianie. Wyświetla wyszukiwanie języka C plus oraz zaawansowane, co powoduje wyświetlenie opcji edytora tekstów.

Aby ustawić opcje formatowania, takie jak wcięcia, uzupełnianie nawiasów klamrowych i kolorowanie, wpisz "C++ Formatting" w oknie Szybkie uruchamianie .

Zrzut ekranu przedstawiający opcje formatowania języka C++, takie jak automatyczne wcięcie podczas wpisywania karty.

Inne opcje formatowania znajdują się w obszarze Edytuj>zaawansowane w menu głównym.

Zrzut ekranu przedstawiający zaawansowane opcje edycji, takie jak wyświetlanie białych znaków, zawijanie wyrazów, komentowanie zaznaczenia, zwiększanie wcięcia wiersza i nie tylko.

Opcje włączania i konfigurowania funkcji edycji specyficznych dla języka C++znajdują się w obszarze Narzędzia>Opcje>Edytor>tekstu C/C++. Po wybraniu opcji, którą chcesz ustawić, możesz uzyskać więcej pomocy, naciskając F1 , gdy okno dialogowe jest w fokusie. Aby uzyskać ogólne opcje formatowania kodu, wpisz Editor C++ ciąg Szybki start.

Zrzut ekranu przedstawiający zaznaczony element menu Programu Visual Studio Narzędzia i wyróżniony element menu Opcje.

Funkcje eksperymentalne, które mogą nie być uwzględnione w przyszłej wersji programu Visual Studio, znajdują się w oknie dialogowym eksperymentalnym edytora tekstu C++. W programie Visual Studio 2017 i nowszych można włączyć funkcję Predykcyjna funkcja IntelliSense w tym oknie dialogowym.

Zobacz też

Przeczytaj i zapoznaj się z kodem C++ Navigate your C++ code
base in Visual Studio
Collaborate with Live Share for C++ (Praca z usługą Live Share dla języka C++ i zapoznaj się z nim)