Visual Studio에서 C++ 코드 편집 및 리팩터링

Visual Studio는 코드를 작성, 편집 및 리팩터링할 수 있는 여러 도구를 제공합니다.

IntelliSense

IntelliSense는 사용자가 입력하면 그에 따라 기호 및 코드 조각을 제안하는 강력한 코드 완성 도구입니다. Visual Studio의 C++ IntelliSense는 실시간으로 실행되며, 사용자가 코드 베이스를 업데이트하면 그것을 분석하여 추천을 제공합니다. 사용자가 더 많은 문자를 입력하면 추천 결과 목록이 좁혀집니다.

추가, 할당 등과 같은 문자열에 사용할 수 있는 메서드를 보여 주는 C++ 멤버 목록 드롭다운의 스크린샷.

일부 기호는 결과 범위를 좁히기 위해 자동으로 생략됩니다. 예를 들어 클래스 외부에서 클래스 개체의 멤버에 액세스할 때에는 기본적으로 프라이빗 멤버 또는 보호된 멤버(자식 클래스 컨텍스트에 있지 않은 경우)를 볼 수 없습니다. 하단의 단추를 사용하여 필터링을 조정할 수 있습니다.

드롭다운 목록에서 기호를 선택한 후에는 Tab, Enter 또는 다른 커밋 문자 중 하나로 기호를 자동 완성할 수 있습니다(기본적으로 { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). 이 목록에서 문자를 추가 또는 제거하려면 빠른 실행(Ctrl + Q)에서 “IntelliSense”를 검색하고 텍스트 편집기> C/C++ > 고급 옵션을 선택합니다. 멤버 목록 커밋 문자 옵션을 사용하면 목록을 원하는 대로 변경하여 사용자 지정할 수 있습니다.

멤버 목록 필터 모드 옵션은 표시할 IntelliSense 자동 완성 제안의 종류를 제어합니다. 기본값으로 유사 항목으로 설정됩니다. 유사 항목 검색에서는 MyAwesomeClass라는 기호가 있는 경우 "MAC"를 입력하고 자동 완성 제안에서 해당 클래스를 찾을 수 있습니다. 유사 항목 알고리즘은 기호가 목록에 표시되려면 충족해야 하는 최소 임계값을 설정합니다. 스마트 필터링은 사용자가 입력한 내용과 일치하는 부분 문자열이 포함된 모든 기호를 표시합니다. 접두사 필터링은 사용자가 입력한 문자로 시작되는 문자열을 검색합니다.

C++ IntelliSense에 대한 자세한 내용은 Visual C++ IntelliSenseIntelliSense에 대한 C++ 프로젝트 구성을 참조하세요.

IntelliCode

IntelliCode는 AI의 도움을 받을 수 있는 IntelliSense입니다. 완성 목록에 사용될 가능성이 가장 높은 후보입니다. IntelliCode 추천은 각각 100개가 넘는 별을 받은 GitHub의 오픈 소스 프로젝트를 기반으로 합니다. 코드의 컨텍스트와 결합하면 완성 목록을 원하는 대로 구성하여 일반적인 사례의 수준을 높일 수 있습니다.

C++을 작성하는 경우 IntelliCode는 표준 라이브러리처럼 인기 있는 라이브러리를 사용할 때 도움이 됩니다. 코드의 컨텍스트는 무엇보다도 가장 유용한 추천을 제공하기 위해 사용됩니다. 다음 예제의 size 멤버 함수는 일반적으로 sort 함수와 함께 사용되므로 결과 목록의 맨 위에 표시됩니다.

코드에서 가장 일반적으로 사용되는 정렬된 벡터 클래스의 멤버를 보여주는 C++ IntelliCode 드롭다운의 스크린샷.

Visual Studio 2022, Visual Studio 2019에서는 IntelliCode가 C++ 데스크톱 개발 워크로드의 선택적 구성 요소로 제공됩니다. IntelliCode가 C++에 대해 활성화되었는지 확인하려면 도구>옵션>IntelliCode>일반으로 이동하여 C++ 기본 모델사용으로 설정합니다.

Visual Studio 2017에서는 IntelliCode가 Visual Studio Marketplace에 확장으로 제공됩니다.

예측 IntelliSense(실험적)

예측 IntelliSense는 컨텍스트 인식 기능을 사용하여 IntelliSense 드롭다운 목록에 표시되는 결과의 수를 제한하는 실험적 기능입니다. 이 알고리즘은 형식 일치를 적용하여 예상 형식과 일치하는 결과만 표시합니다. 간단한 예를 들자면, int x =을 입력하고 IntelliSense 드롭다운을 호출하면 정수 또는 정수를 반환하는 함수만 표시됩니다. 이 기능은 아직 개발 중이기 때문에 기본적으로 해제되어 있습니다. 이 기능이 가장 잘 작동하는 것은 글로벌 기호이며, 멤버 함수는 아직 지원되지 않습니다. 빠른 실행에 "예측"을 입력하거나 도구>옵션>텍스트 편집기>C/C++>실험적>예측 IntelliSense 사용으로 이동하여 이 기능을 켤 수 있습니다.

예측 IntelliSense를 재정의하고 더 긴 목록을 표시하려면 Ctrl + J를 누릅니다. 예측 IntelliSense가 켜져 있는 경우 Ctrl + J를 누르면 예측 필터가 제거됩니다. Ctrl + J를 다시 누르면 관련된 멤버 목록 결과에서 내게 필요한 옵션 필터가 제거됩니다. IntelliSense 드롭다운 목록 아래의 ([+]) 단추는 Ctrl + J와 똑같은 방식으로 작동합니다. 마우스 커서를 단추 위로 이동하면 현재 표시되는 항목의 도구 설명 정보를 볼 수 있습니다.

C++ 예측 IntelliSense의 스크린샷

이전 스크린샷은 드롭다운 목록 아래에 있는 여러 단추를 보여줍니다. 이러한 단추를 통해 다양한 종류의 결과에 IntelliSense 필터를 사용할 수 있습니다.

  • 변수와 상수
  • 함수
  • 유형
  • 매크로
  • 열거형
  • 네임스페이스

단추는 현재 IntelliSense 세션과 관련이 있는 경우에만 표시됩니다. 일반적으로 일부 단추만 표시됩니다.

템플릿 IntelliSense

템플릿 표시줄은 커서가 템플릿 정의 위에 있을 때 나타나는 UI 요소입니다. 템플릿 본문을 편집할 때 표시되는 intellisense에 대한 샘플 템플릿 인수를 제공할 수 있기 때문에 유용합니다. 예를 들어 템플릿 인수가 std::vector<int> 형식임을 지정할 수 있습니다. 그런 다음 템플릿 본문에서 해당 인수를 사용하면 intellisense에서 std::vector<int>의 멤버가 표시됩니다.

모든 기존 인스턴스화 추가 옵션이 강조 표시된 템플릿 모음의 스크린샷.

<T> 아이콘을 클릭하여 템플릿 모음을 확장/축소합니다. 연필 아이콘을 클릭하거나 템플릿 모음을 두 번 클릭하여 매개 변수의 인수 형식을 지정하는 편집 창을 엽니다.

각 템플릿 매개 변수에 대한 형식을 입력하는 템플릿 모음 내의 편집 환경 스크린샷.

템플릿 모음은 코드에서 템플릿의 인스턴스화에 따라 매개 변수 형식을 자동으로 채울 수 있습니다. 모든 기존 인스턴스화 추가를 클릭하면 코드 베이스 전체에서 템플릿 인스턴스화에 사용된 모든 구체적 인수 목록을 볼 수 있습니다.

C = AmbientLight, C = Candle 등과 같은 템플릿 매개 변수 C를 인스턴스화하는 데 사용되는 다양한 형식을 나열하는 템플릿 IntelliSense 결과의 스크린샷.

편집기 하단의 창은 각 인스턴스화가 발견된 위치 및 해당 인수를 보여줍니다. 인스턴스화를 선택하여 해당 인스턴스가 발견된 코드의 위치로 이동합니다.

코드에 있는 템플릿 인스턴스화 목록의 스크린샷. 인스턴스화, 파일, 위치 및 인수가 나열됩니다.

템플릿 표시줄 정보는 사용자별입니다. .vs 폴더에 저장되며 소스 제어에 커밋되지 않습니다.

오류 표시선 및 빠른 수정

편집기는 코드에서 문제를 발견하면 해당 문제 아래에 색이 있는 오류 표시선을 추가합니다. 빨간색 오류 표시선은 컴파일되지 않는 코드를 나타냅니다. 녹색 오류 표시선은 중대한 오류일 수도 있는 다른 종류의 문제를 나타냅니다. 오류 목록 창을 열면 문제에 대한 자세한 정보를 볼 수 있습니다.

일부 오류와 일반적인 코딩 패턴의 경우 편집기에서 오류 표시선 위로 마우스 커서를 이동하면 전구 모양의 형태로 빠른 수정이 제공됩니다. 아래쪽 화살표를 클릭하면 제안 사항을 볼 수 있습니다.

다음 예제에서는 vector가 선언되었지만 정의를 찾을 수 없으므로 편집기는 다음과 같은 필요한 헤더 파일을 포함할 것을 제안합니다.

# include 벡터에 대한 오류 및 제안된 빠른 수정의 스크린샷

또한 편집기는 일부 리팩터링 기회에 빠른 픽스를 제공합니다. 예를 들어 헤더 파일에서 클래스를 선언하면 Visual Studio는 별도의 .cpp 파일에 해당 클래스에 대한 정의를 만들 것을 제안합니다.

channel.cpp 옵션에서 채널의 채널 경로 반복기 정의 만들기가 강조 표시된 빠른 수정을 보여 주는 스크린샷

Change tracking

사용자가 파일을 변경할 때마다 저장되지 않은 변경 내용이 있음을 나타내는 노란색 표시줄이 왼쪽에 표시됩니다. 파일을 저장하면 표시줄이 녹색으로 바뀝니다. 녹색 및 노란색 표시줄은 문서가 편집기에서 열려 있는 동안 유지됩니다. 이러한 표시줄은 사용자가 마지막으로 문서를 연 이후에 변경한 내용을 나타냅니다.

C++ 변경 내용 추적의 스크린샷. 왼쪽 아래의 노란색 막대가 변경 내용을 나타내도록 표시됩니다.

코드 이동

코드를 선택하고, Alt 키를 누른 상태에서 위쪽/아래쪽 화살표 키를 눌러 코드 줄을 위아래로 이동할 수 있습니다.

코드 조각 삽입

코드 조각은 소스 코드의 미리 정의된 조각입니다. 단일 지점이나 선택한 텍스트를 마우스 오른쪽 단추로 클릭하고 코드 조각을 선택하여 코드 조각을 삽입하거나 선택한 텍스트를 코드 조각으로 둘러쌉니다. 다음 그림에서는 선택한 문을 for 루프로 둘러싸는 세 단계를 보여 줍니다. 최종 이미지의 노란색 강조 표시는 tab 키를 사용하여 액세스하는 편집 가능한 필드입니다. 자세한 내용은 코드 조각을 참조하세요.

조각 삽입 드롭다운 컨트롤의 스크린샷.

함수가 선택됩니다. 함수 이름을 마우스 오른쪽 단추로 클릭한 후 표시되는 드롭다운에서 코드 감싸기는 노란색으로 강조 표시됩니다. 코드 감싸기: 드롭다운, ‘for’ 루프에 대한 코드 조각이 선택됩니다. 이로써 for 루프가 함수 주위에 배치됩니다. 루프 변수 및 제한은 편집 가능한 필드임을 나타내기 위해 노란색으로 표시됩니다.

클래스 추가

프로젝트 메뉴 또는 솔루션 탐색기의 팝업 메뉴에서 새 클래스를 추가합니다.

새 클래스 추가 대화 상자의 스크린샷. 클래스 이름, 접근성, 선언 및 구현을 넣을 파일 등에 대한 필드가 있습니다.

기존 클래스를 수정하거나 검사하려면 클래스 마법사를 사용할 수도 있습니다.

메서드, 멤버 변수 등을 추가하는 옵션이 있는 클래스 마법사의 스크린샷.

자세한 내용은 코드 마법사로 기능 추가(C++)를 참조하세요.

리팩터링

리팩터링은 빠른 작업 상황에 맞는 메뉴 아래에서 또는 편집기에서 전구를 클릭하여 사용할 수 있습니다. 일부는 편집 > 리팩터링 메뉴에 있습니다. 이러한 기능에는 다음이 포함됩니다.

ClangFormat 및 EditorConfig를 사용하여 코드 스타일 적용

Visual Studio 2017 이상부터는 Clang/LLVM 기반의 인기 있는 C++용 코드 서식 지정 유틸리티인 ClangFormat을 기본적으로 지원합니다. 빠른 실행에 "ClangFormat"을 입력하고 다음과 같은 일반 형식 중 하나를 사용하도록 설정합니다.

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

동일한 수준 또는 하위 수준에서 모든 코드에 사용자 지정 규칙을 적용하는 사용자 고유의 .clang-format 또는 _clang-format 파일을 제공할 수도 있습니다.

이러한 파일은 소스 제어를 통해 쉽게 공유할 수 있으므로, 개발 팀 전체에 코딩 규칙을 적용할 수 있습니다.

열 제한, 들여쓰기 너비, 탭 너비 등과 같은 많은 옵션이 있는 .clang-format 파일을 보여 주는 스크린샷.

Visual Studio 2017 이상부터는 비슷한 방식으로 작동하는 EditorConfig도 지원합니다. 하지만 ClangFormat은 C++와 관련된 규칙을 포함하여 EditorConfig보다 많은 스타일 옵션을 제공합니다. EditorConfig.editorconfig 파일을 만들어서 데이터베이스의 여러 폴더에 배치하는 방법으로 해당 폴더와 그 하위 폴더의 코드 스타일을 지정할 수 있습니다. .editorconfig 파일은 부모 폴더의 다른 .editorconfig 파일을 대체하고 도구>옵션을 통해 구성된 서식 설정을 덮어씁니다. 탭과 공간, 들여쓰기 크기 등에 대한 규칙을 설정할 수 있습니다. 자세한 내용은 EditorConfig를 사용하여 휴대용, 사용자 지정 편집기 설정 만들기를 참조하세요.

다른 서식 지정 옵션

빠른 실행 검색 상자는 설정 또는 도구를 찾는 가장 빠른 방법을 제공합니다. 이 방법은 주 메뉴에 있습니다. 입력을 시작하면 자동 완성 목록이 결과를 필터링합니다.

빠른 실행 검색 상자의 스크린샷. 텍스트 편집기를 위한 옵션을 생성하는 C++ 고급 검색을 보여 제공합니다.

들여쓰기, 중괄호 완성, 색 지정과 같은 서식 지정 옵션을 설정하려면 빠른 실행 창에 "C++ 서식 지정"을 입력합니다.

탭을 입력할 때 자동으로 들여쓰기 할지 여부와 같은 C++ 서식 옵션을 보여 주는 스크린샷.

다른 서식 지정 옵션은 주 메뉴의 편집>고급 아래에서 찾을 수 있습니다.

공백 보기, 단어 줄 바꿈, 선택 영역 주석 처리, 줄 들여쓰기 증가 등의 고급 편집 옵션을 보여 주는 스크린샷.

C++ 관련 편집 기능을 사용하고 구성하기 위한 옵션은 도구>옵션>텍스트 편집기>C/C++ 에 있습니다. 설정하려는 옵션을 선택한 후 대화 상자에 초점이 맞춰져 있을 때 F1 키를 누르면 추가 도움말을 확인할 수 있습니다. 일반적인 코드 서식 지정 옵션은 빠른 실행Editor C++을 입력합니다.

Visual Studio 메뉴 항목 도구가 선택되고 옵션 메뉴 항목이 강조 표시된 스크린샷

향후 버전의 Visual Studio에 포함될 수도 포함되지 않을 수 있는 실험적 기능은 텍스트 편집기 C++ 실험적 대화 상자에 있습니다. Visual Studio 2017 이상에서는 이 대화 상자에서 예측 IntelliSense를 사용하도록 설정할 수 있습니다.

관련 항목

C++ 코드 읽기 및 이해
Visual Studio에서 C++ 코드베이스 탐색
C++용 Live Share를 사용하여 협업