본문 바로가기

개발환경구성

Windows에서 Visual Studio Code C/C++ 프로그래밍

source: Visual Studio Code에서 C/C++ 프로그래밍

연관 글: Visual Studio Community 2019 설치하고 Hello World 출력하기

글을 쓰는 배경

C/C++ 프로그래밍을 할 수 있는 Visual Studio Code (이하 vscode) 를 설치하여 이용해 보려다가 잘 정리된 자료 Visual Studio Code에서 C/C++ 프로그래밍 를 참고하여 필자도 직접 확인하는 과정을 글로 남깁니다. 이 글을에서는 컴파일러 설정, Visual Studio 설치, 한글 지원, 그리고 디버거 이용까지만 다룹니다. 더 넓은 주제는 자료 Visual Studio Code에서 C/C++ 프로그래밍 를 참고하는 것을 추천합니다. 

 

source 글을 읽어보니 mingw 설치를 해야 한다는 것을 알았고, 2개의 글을 작성했습니다. 필자는 mingw64를 이용할 예정입니다. 

1. C/C++ 컴파일러 설치

2. Visual Studio Code 설치

https://code.visualstudio.com/download 에 접근하여 Windows용 Visual Studio Code를 다운로드 합니다. 

설치하면 Windows안의 다른 사용자도 사용할 수 있는 System Installer 64bit을 다운로드 합니다. 

  • VSCodeSetup-x64-1.58.2.exe

 

다운로드한 VSCodeUserSetup-x64-1.58.2.exe를 수행합니다. 

 

계약서 동의

설치 위치 선택

 

바로가기 만들기

추가 작업 선택

설치 준비 완료 및 설치 시작

설치 진행

설치 완료

 

설치 마법사를 완료하면 바로 Visual Studio Code를 실행하며 아래 화면과 같이 "언어 팩을 설치하여 표시 언어를 한국어(으)로 변경합니다" 메시지를 봅니다. 여기에서 "설치 및 다시 시작"을 선택합니다. 

 

Korean Language Pack(한국 언어 팩) 을 설치하고 다시 Visual Studio Code를 종료/실행하면, 각종 메뉴를 한글로 볼 수 있습니다. 

만약 Korean Language Pack을 설치하지 않았다면 ctrl shift x 를 누르고 입력창에 korean 이라고 입력한 후 install/설치를 클릭해 주면 됩니다. 그리고 Restart를 합니다. 

 

3. C/C++ 프로젝트 폴더 생성 선택

프로젝트 또는 주제별로 프로그램 source를 폴더에 저장하고 작업을 하는 것이 좋습니다. 그리고 vscode에서는 이런 폴더를 열어 source를 선택하여 컴파일하고 수행합니다.

 

필자는 미리 Windows 10 시스템에 C:\C_C++_Projects를 만들어 두고, 나머지 아래 과정을 진행합니다. 

 

vscode에서 한국 언어 팩을 설치하고 다시 실행하면 다음과 같은 화면을 만납니다.

여기에서 폴더열기를 선택하거나 또는 파일 > 폴더 열기를 선택하고 미리 만들어 놓은 폴더 "C:\C_C++_Projects"를 선택합니다.
* c_c++_projects 아닌 본인이 원하는 이름을 이용하면 됩니다.

그러면 다음과 같이 vscode 좌측 탐색기 아래 해당 폴더(c_c++_projects)를 추가합니다. 


4. C/C++ 컴파일러 설정

아직 vscode에 c source나 c++ source용 컴파일러를 지정하지 않았습니다. 따라서 아래에서는 c source와 c++ source를 1개씩 만들어 추가하고, 이때 c, c++ 컴파일러를 지정하겠습니다. 그리고 c, c++ 언어 확장팩을 지정해 줍니다. 

 

4-1. c source 폴더 작성 및 프로그램 파일 작성

탐색기 아래 c_c++_projects를 선택하고 확장하고 하단을 선택합니다. 

오른쪽 마우스 버튼을 누른 뒤 새 폴더를 선택합니다. 

c source를 저장할 서브 폴더 hello world c를 생성합니다. 
hello world c가 아닌 본인이 원하는 이름으로 폴더를 생생하면 됩니다. 

 

hello world c를 선택하고 오른쪽 마우스 버튼을 누른 뒤 새 파일을 선택합니다. 

hello.c를 생성합니다. 

 

4-2. c++ source 폴더 작성 및 프로그램 파일 작성

동일한 방법으로 새 sub 폴더 hello world cpp, 그 밑에 새 파일 hello cpp.cpp을 생성합니다. 

 

hello.c와 hello cpp.cpp에 각각 아래 source를 입력해 줍니다. 

 

hello.c

#include <stdio.h>
 
int main()
{
    printf("Hello, world!\n");
    return 0;
}

 

hello cpp.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, World!" << endl;

    return 0;
}

 

hello.c를 선택하고 ctrl S, hello cpp.cpp를 선택하고 ctrl S를 눌러 저장합니다. 

 

 

4-3. C/C++ Extension Pack, C/C++ 설치

ctrl shift x 를 눌러 확장 팩 2개를 설치합니다. 

- c/c++

- c/c++ Extenstion Pack

설치 버튼을 클릭하여 설치합니다. 설치가 완료되면 설치가 설정 아이콘으로 변합니다. 

 

지금까지 컴파일러를 설치하고, Visual Studio Code를 설치하고, 한글 지원 확장팩, c/c++ 확장팩을 설치하고, 마지막으로 source 폴더와 source 프로그램을 작성하였습니다. 

 

이제는 명령 팔레트 (ctrl shift p)에서 c/c++ 구성편집(UI)를 설정해야 합니다. ctrl shift p를 누르고 다음 c/c++ 을 입력하여 구성 편집(UI)를 선택합니다. 

그러면 다음 화면을 만납니다. 

여기에서 다음과 같은 것을 선택/설정합니다. 

구성이름: Win32 유지

컴파일러경로: c:/mingw64/bin/g++.exe 

IntelliSense 모드: windows-gcc-x64

c표준: c17

c++표준: c++17

 

그리고 나서 c/c++ configuration 탭을 닫습니다. 선택한 값을 자동 저장합니다. 

 

이렇게 하고 나면 탐색기 아래 폴더 c_c++_projects에 sub 폴더 .vscode가 추가되어 있고, 그 안에 파일 c_cpp_properties.json이 추가된 것을 볼 수 있습니다. 

c_cpp_properties.json 을 선택해 내용을 살펴보면 c/c++ 구성편집(UI)에서 선택한 값을 볼 수 있습니다. 

c_cpp_properites.json이 포함하고 있는 내용은 컴파일러에게 이런 내용을 알려주는 것입니다. 

  • include Path
  • windows SDK version 
  • compiler Path
  • cStandard, cppStandard
  • intelli Sense Mode

 

5. 코드 컴파일 및 실행

이제 source를 컴파일할 차례입니다. 

탐색기 아래 c_c++_projects를  선택한 후 vscode 메뉴  터미널 > 기본빌드작업구성을 선택합니다. 

c/c++: g++.exe 활성 파일 빌드를 선택합니다. 

tasks.json 파일을 추가한 것을 볼 수 있습니다. 

tasks.json에 있는 내용을 아래 내용으로 교체합니다. 

// source: https://webnautes.tistory.com/1158
{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation" : { "reveal": "always" },
    "tasks": [
          //C++ 컴파일
          {
            "label": "save and compile for C++",
            "command": "g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",

            //컴파일시 에러를 편집기에 반영
            //참고:   https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher

            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    // The regular expression. 
                   //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        //C 컴파일
        {
            "label": "save and compile for C",
            "command": "gcc",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build",

            //컴파일시 에러를 편집기에 반영
            //참고:   https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher

            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    // The regular expression. 
                   //Example to match: helloWorld.c:5:3: warning: implicit declaration of function 'prinft'
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        // 바이너리 실행(Ubuntu)
        // {
        //     "label": "execute",
        //     "command": "${fileDirname}/${fileBasenameNoExtension}",
        //     "group": "test"
        // }
        // 바이너리 실행(Windows)
        {
            "label": "execute",
            "command": "cmd",
            "group": "test",
            "args": [
                "/C", "${fileDirname}\\${fileBasenameNoExtension}"
            ]
    
        }
    ]
}

결과 화면입니다. 

이 tasks.json을 이용할 경우 c source나 c++ source 를 선택하여 컴파일할 수 있습니다. 

 

마지막으로 컴파일 및 실행을 할 수 있는 사용자 정의 단축키를 설정합니다. 

 

vscode 파일 > 기본설정 > 바로가기키 를 선택합니다.

 

그리고 메뉴 바 우측 상단의 버튼 (바로가기키열기)을 선택하면

keybindings.json 을 볼 수 있습니다. 내용을 아래 것으로 교체합니다. 

// 키 바인딩을 이 파일에 넣어서 기본값을 덮어씁니다.
[
    //컴파일
    { "key": "ctrl+alt+c", "command": "workbench.action.tasks.build" },
    
    //실행
    { "key": "ctrl+alt+r", "command": "workbench.action.tasks.test" }
]

결과 화면입니다. 

 

이제 hello.c를 선택하고 cltr alt c 를 누릅니다. c source 이므로 save and compile for c 를 선택합니다. 

컴파일이 진행되는 것을 우측하단에서 볼 수 있습니다. 컴파일러로 gcc를 이용하며, hello.c를 읽어와 컴파일하며, 결과를 동일 폴더에 동일한 이름으로 출력합니다. 그 결과 hello.exe가 탐색기에 추가됩니다.

 

hello.exe를 선택하고 ctrl alt r 를 누릅니다. execute을 선택합니다. 

우측 하단 터미널에 hello world를 출력하는 것을 볼 수 있습니다. 

 

이제 hello cpp.cpp를 선택하고 cltr alt c 를 누릅니다. c++ source 이므로 save and compile for c++ 를 선택합니다.  

hello cpp.exe가 탐색기에 추가됩니다. 

hello cpp.exe를 선택하고 ctrl alt r 를 누릅니다. execute을 선택합니다. 

 hello world를 출력합니다.

 

6. 한글 입출력 

참고: https://webnautes.tistory.com/1158

7. 디버깅

참고: https://webnautes.tistory.com/1158

 

 

연관 글: Visual Studio Community 2019 설치하고 Hello World 출력하기