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 w języku C++ w programie Visual Studio działa w czasie rzeczywistym, analizując bazę kodu podczas aktualizowania i dostarczania zaleceń. Podczas wpisywania większej liczby znaków lista zalecanych wyników jest zawężana.

Zrzut ekranu przedstawiający listę rozwijaną listy elementów członkowskich plus z listą 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 elementów członkowskich ani chronionych elementów członkowskich (jeśli nie jesteś w kontekście klasy podrzędnej). Filtrowanie można dostosować przy użyciu przycisków u dołu.

Po wybraniu symbolu z listy rozwijanej możesz ją automatycznie uzupełnić za pomocą klawisza 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 filtrowania listy elementów członkowskich określa, jakie rodzaje sugestii automatycznego uzupełniania funkcji IntelliSense są widoczne. Domyślnie jest ona ustawiona na Rozmytą. 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 wpisanego elementu. Filtrowanie prefiksów wyszukuje ciągi rozpoczynające się od wpisanego tekstu.

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 C++ dla funkcji IntelliSense).

IntelliCode

IntelliCode to funkcja IntelliSense wspomagana przez sztuczną inteligencję. Najbardziej prawdopodobnym kandydatem na początku listy ukończenia. Zalecenia 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 size funkcja składowa 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 i 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 funkcja IntelliCode jest dostępna 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>intelliCode>Ogólne i ustaw model podstawowy języka C++ na Włączone.

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

Predykcyjna funkcja IntelliSense (eksperymentalna)

Funkcja IntelliSense predykcyjna to funkcja eksperymentalna, która używa świadomości kontekstowej w celu ograniczenia liczby wyników wyświetlanych na liście rozwijanej IntelliSense. Algorytm stosuje dopasowanie typu, 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 składowe 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> tekstuC/C++>Eksperymentalnafunkcja IntelliSense włączania predykcyjnego>.

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

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

Powyższy zrzut ekranu przedstawia kilka przycisków na liście rozwijanej. Umożliwiają one filtrowanie 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 on odpowiedni dla bieżącej sesji funkcji IntelliSense. Zwykle nie widać wszystkich przycisków jednocześnie.

Funkcja IntelliSense szablonu

Pasek szablonu to element interfejsu użytkownika, który pojawia się, 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żyjesz tego argumentu w treści szablonu, zobaczysz członków std::vector<int>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, w 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. Wymieniono wystąpienia, plik, lokalizację 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 wywija się i szybkie poprawki

Jeśli edytor wykryje problemy z kodem, doda kolorowe wywiórki w ramach problemu. Czerwone wywiórki wskazują kod, który nie zostanie skompilowany. Zielone wywiórki 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 oferuje szybką poprawkę w postaci żarówki, która pojawia się po umieszczeniu wskaźnika myszy na wywijanie. Kliknij strzałkę w dół, aby wyświetlić sugestie.

W poniższym przykładzie vector zadeklarowano, 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 definicji dla niej w osobnym pliku cpp.

Zrzut ekranu przedstawiający szybką poprawkę z wyróżnioną opcją Utwórz definicję 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 paski 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 wydaje się wskazywać zmiany.

Przenoszenie kodu

Możesz przenosić wiersze kodu w górę i w dół, wybierając je, przytrzymując klawisze Alt i naciskając klawisze strzałki 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, a następnie wybierz pozycję Fragment kodu, aby wstawić fragment kodu lub otaczać zaznaczony tekst fragmentem kodu. Na poniższej ilustracji przedstawiono trzy kroki otaczające wybraną instrukcję z pętlą for. Żółte wyróżnienia na ostatnim obrazie to pola edytowalne, do których uzyskujesz dostęp za pomocą klawisza tabulacji. Aby uzyskać więcej informacji, zobacz Fragmenty kodu.

Zrzut ekranu przedstawiający kontrolkę Wstaw fragment kodu z listą rozwijaną.

Wybrano funkcję. 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 przedstawiający Kreatora klas z opcjami 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ę . Są one następujące:

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 tych typowych formatów:

  • LLVM
  • Google
  • Chrom
  • Mozilla
  • Webkit
  • Visual Studio

Możesz również podać własny .clang-format plik lub _clang-format 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 kolumn, 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 w celu określenia stylów 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 automatycznego uzupełniania przefiltruje wyniki.

Zrzut ekranu przedstawiający pole wyszukiwania Szybkie uruchamianie. Pokazuje wyszukiwanie języka C plus plus 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 można znaleźć 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> tekstuC/C++. Po wybraniu opcji, którą chcesz ustawić, możesz uzyskać więcej pomocy, naciskając klawisz F1 , gdy okno dialogowe jest w trybie koncentracji uwagi. Aby uzyskać ogólne opcje formatowania kodu, wpisz Editor C++ciąg w obszarze Szybkie uruchamianie.

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 tekstów C++ . W programie Visual Studio 2017 lub nowszym można włączyć funkcję Predictive IntelliSense w tym oknie dialogowym.

Zobacz też

Odczytywanie i interpretowanie kodu
C++ Nawigowanie po bazie kodu C++ w programie Visual Studio
Współpraca z usługą Live Share dla języka C++