Edytowanie i refaktoryzacja kodu C++ w Visual Studio

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 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.

Screenshot of the C plus plus member list drop down.

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ż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 > tekstu C/C++ > Advanced . Opcja Znak zatwierdzenia listy elementów członkowskich umożliwia dostosowanie listy z żądanymi zmianami.

Opcja Tryb filtrowania listy elementów członkowskich określa, jakie są wyświetlane sugestie autouzupełniania funkcji IntelliSense. 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 musi spełniać symbole, 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ę. Umieszcza najbardziej prawdopodobne kandydata na początku listy uzupełniania. Zalecenia intelliCode są oparte na tysiącach projektów open source na GitHub każdy z ponad 100 gwiazdek. W połączeniu z kontekstem kodu lista uzupełniania jest dostosowana do promowania typowych praktyk.

Podczas pisania języka C++funkcja IntelliCode pomaga w używaniu popularnych bibliotek, takich jak Standardowa biblioteka języka C++. Kontekst kodu służy do uprzedniego 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 uwidoczniena na początku listy wyników.

Screenshot of C plus plus IntelliCode.

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

W Visual Studio 2017 r. 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 świadomości kontekstowej w celu ograniczenia liczby wyników wyświetlanych na liście rozwijanej 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 nadal w programowania. 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ędziaOpcje>>Edytor>tekstówC/C++>ExperimentalEnable>Predictive IntelliSense.

Aby zastąpić funkcję Predictive IntelliSense i wyświetlić dłuższą listę, naciśnij klawisze Ctrl + J. Jeśli funkcja Predictive IntelliSense 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 tam, gdzie jest to istotne. Przycisk ([+]) na liście rozwijanej IntelliSense wykonuje to samo, co Ctrl + J. Zatrzymaj wskaźnik myszy na przycisku, aby wyświetlić informacje o wyświetlanej etykietce narzędzia.

Screenshot of C plus plus Predictive IntelliSense.

Powyższy zrzut ekranu przedstawia kilka przycisków na liście rozwijanej. Umożliwiają one korzystanie z filtrów 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 wszystkie przyciski nie są widoczne w tym samym czasie.

Funkcja IntelliSense szablonu

Gdy daszek znajduje się wewnątrz definicji szablonu, zostanie wyświetlony pasek szablonu , który umożliwia podanie przykładowych argumentów szablonu dla funkcji IntelliSense.

Screenshot of C plus plus Template IntelliSense Show Existing Instantiations.

Kliknij ikonę <T> , aby rozwinąć/zwinąć pasek szablonu. Kliknij ikonę ołówka lub kliknij dwukrotnie pasek szablonu , aby otworzyć okno Edycja .

Screenshot of C plus plus Template IntelliSense.

Zmiany tworzone w oknie są stosowane bezpośrednio do kodu źródłowego, dzięki czemu efekty są widoczne w czasie rzeczywistym.

Pasek szablonu może automatycznie wypełniać kandydatów na podstawie wystąpień 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.

Screenshot of C plus plus Template IntelliSense Results List.

Okno w dolnej części edytora pokazuje, gdzie znaleziono każde wystąpienie i jakie były jego argumenty.

Screenshot of C plus plus Template IntelliSense Instantiation Map.

Informacje o pasku szablonu są traktowane jako 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 zygzaki wskazują 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, a także typowych wzorców kodowania, edytor zaoferuje szybką poprawkę w postaci żarówki wyświetlanej po umieszczeniu wskaźnika myszy na zygiełce. 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:

Screenshot showing error squiggles and the quick fix that the editor offers.

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

Screenshot showing the quick fix with the Create definition of Channel Route Iterator in channels dot C P P option highlighted.

Śledzenie zmian

Za każdym razem, gdy wprowadzisz zmianę w pliku, po lewej stronie pojawi się żółty pasek wskazujący, ż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.

Screenshot of C plus plus change tracking.

Przenoszenie kodu

Możesz przenosić wiersze kodu w górę i w dół, zaznaczając je, trzymając w dół Alt i naciskając klawisze 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, aby wstawić fragment kodu lub otaczać zaznaczony tekst fragmentem kodu. Poniższa ilustracja przedstawia trzy kroki otaczania wybranej instrukcji pętlą for. Żółte wyróżnienia na końcowym obrazie są polami edytowalnymi, do których uzyskujesz dostęp za pomocą klawisza tabulacji. Aby uzyskać więcej informacji, zobacz Fragmenty kodu.

Screenshot of C plus plus Insert Snippet Drop down control.

Dodaj klasę

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

Add New Class in C plus plus.

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

C plus plus Class Wizard.

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

Refaktoryzacja

Refaktoryzacja jest dostępna w menu kontekstowym Szybkie działanie lub klikając żarówkę w edytorze. Niektóre z nich znajdują się również w menu Edytowanie > refaktoryzacji . Są one następujące:

Wymuszanie stylu kodu za pomocą formatu ClangFormat i EditorConfig

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

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • Webkit
  • Visual Studio

Możesz również podać własny plik w formacie clang lub _clang format, 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.

Screenshot showing C plus plus Clang Format.

Visual Studio 2017 i nowszych obsługuje również funkcję EditorConfig, która 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 tworzysz pliki editorconfig i umieszczasz 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ą narzędziOptions>. Możesz ustawić reguły dla kart a 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.

Screenshot showing Visual Studio Quick Launch.

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

Screenshot showing C++ formatting options.

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

Screenshot showing C++ advanced editing options.

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

Screenshot showing Visual Studio Tools > Options dialog editor options.

Funkcje eksperymentalne, które mogą nie być uwzględnione w przyszłej wersji Visual Studio, znajdują się w oknie dialogowym Eksperymentalny edytor tekstów C++. W Visual Studio 2017 i nowszych można włączyć predykcyjną funkcję IntelliSense w tym oknie dialogowym.

Zobacz też

Odczytywanie i interpretacja kodu
C++ Nawigowanie po bazie kodu C++ w usłudze Visual Studio
Collaborate przy użyciu Live Share dla języka C++