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.
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.
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.
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.
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.
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.
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.
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:
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.
Ś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.
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.
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ń:
Możesz również użyć Kreatora klas, aby zmodyfikować lub zbadać istniejącą klasę.
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żą:
- Zmień nazwę
- Wyodrębnianie funkcji
- Implementowanie czystych elementów wirtualnych
- Tworzenie deklaracji/definicji
- Przenoszenie definicji funkcji
- Konwertowanie na literał nieprzetworzonego ciągu
- Zmienianie podpisu
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
- 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.
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.
Aby ustawić opcje formatowania, takie jak wcięcia, uzupełnianie nawiasów klamrowych i kolorowanie, wpisz "C++ Formatting" w oknie Szybkie uruchamianie .
Inne opcje formatowania znajdują się w obszarze Edytuj>zaawansowane w menu głównym.
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.
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)