개발 환경/C&C++ 개발환경

Visual Studio Code를 사용한 C/C++ 개발환경 만들기-(Windows/Ubuntu)

webnautes 2024. 10. 6. 23:21
반응형

Windows와 Ubuntu 환경에 설치된 Visual Studio Code에서 C/C++을 컴파일하고 실행시키는 방법에 대해 설명합니다. 

테스트에 사용한 운영체제 버전은 Windows 11과 Ubuntu 22.04입니다.

 

Visual Studio Code 버전에 따라 진행 방법이 달라 질 수 있습니다.

문제가 되는 것을 발견할 때마다 문서를 업데이트합니다.

 

 

 

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

 

2. Visual Studio Code 설치

 

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

 

4. C/C++ 언어 지원 설치

 

5. 코드 컴파일 및 실행

 

6. 한글 입출력 예제 

 

7. 디버깅하는 방법 

 

8. CMake를 사용하여 둘 이상의 소스 코드 파일로 구성된 프로젝트 컴파일하기

 

9. Make를 사용한 프로젝트 컴파일하기






2017.  8. 15   최초 작성

2018.  1.   9   tasks.json 일부 문법 변경으로 수정

2018.  1. 17   IntelliSense와 디버깅 방법 추가

2018.  7.  3   Ubuntu에서 하는 방법과 통합

2018.  7.  19  한글 입출력 예제 추가 

2018.  10. 12  최신 버전에서 확인 및 수정

2018.  11. 20  리눅스에서 tasks.json 수정

2018.  12. 3  디버깅 방법 개선

2018. 12.22  Windows 10 RS5(버전 1809)로 업데이트시 한글 깨짐 현상 발생

2019. 5. 1  1.33에서 바뀐점 수정

2019. 5. 21  전역 변수 디버깅 방법 추가 

2019. 6. 20  비주얼 스튜디오 코드 업데이트로 바뀐점 수정

2019. 8. 15  디버깅 관련 수정, mingw-w64에 맞추어 수정

2019. 8. 20  Ubuntu를 위한 부분 업데이트

2019. 10. 22 디버그시 launch.json 생성 문제 해결방법 추가

2019. 11. 17 utf8을 사용해도 한글 안 깨지도록 수정

2019. 12. 1   euc-kr로 변경

2020. 4. 12  우분투에서 컴파일된 프로그램 실행시 에러나는 문제 해결

                     lenilune3님이 알려주신 건데 이제서야 반영했네요.  

2020. 6. 26  Windows 10 - 64비트 컴파일러로 변경

2020. 9.  2  Windows 10에서 동작 확인 

2021. 2. 16 CMake를 사용하여 둘 이상의 소스 코드 파일로 구성된 프로젝트 컴파일하기

2021. 2. 25  티스토리 신버전 에디터로 바뀌면서 일부 내용이 엉뚱하게 바뀐점을 발견하여 수정하여 올렸습니다. 

2021. 3. 4  최신버전에서 바뀐점 반영

2021. 7. 17 VIsual Studio Code 업데이트 후, CMAKE 사용시 바뀐점 반영

2021. 10. 4 터미널을 명령프롬프트로 바꾸기 추가

2022. 4. 30 CMAKE 사용시 디버그 안되는 경우에 대한 문제 해결 

2022. 9. 24 CMake 방식에서 디버그 안되는 문제 해결

2023. 1. 11 문제 없는지 윈도우에서 검토 

2023. 1. 29 vscode 인터페이스 한글화 방법 수정

2023. 3. 13 윈도우 11에서 검증 - 빌드 설정 바뀐 부분 반영

2023. 3. 18 우분투 22.04에서 검증

2023. 3. 20 CMake 사용시 C 소스코드 컴파일 방법 추가

2024. 1. 17 컴파일후 바로 실행 추가 (Windows)

2024. 1. 23 컴파일후 바로 실행 추가(ubuntu)

2024. 2. 7  디버깅 검토

2024. 3. 10 한글 출력관련 내용 보완

2024. 4. 6 cmake 포스트 분리, make 포스트 추가

 

2024. 6. 23 vscode 디폴트 C/C++ 빌드/실행과 tasks.json 수정한 C/C++ 빌드 차이에 대한 생각

 

vscode에서 디폴트 기능 사용하여 C/C++ 컴파일/실행하는 것과 포스트에서 처럼 tasks.json을 직접 작성해서 하는 것의 차이가 뭐냐고 물어보신분이 있었는데.. 좀 늦게 이제서야 확인해보니 사용하는데에는 큰 차이가 없고 커스터마이즈해서 사용할 수 있는지 여부가 아닐까 싶습니다. 

 

2024. 10. 2 MinGW 설치 방법 변경





2023. 3. 18 변경된 부분을 반영하여 유튜브 영상을 다시 만들었습니다. 영상이 편하신 분은 유튜브에서 보세요.

 

 

2024. 10. 6 변경되었던 디버깅 방법을 반영하여 영상을 다시 만들었습니다. 영상이 편하신분은 유튜브에서 보세요.

https://youtu.be/Fbg6DCqMrYs?si=Wg72_VCtwnDuok03

 

 

 

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

1.1. Windows 

 

글 작성 시점에서 아래 링크에서 Release of 14.2.0-rt_v12-rev0 항목에 있는 x86_64-14.2.0-release-win32-seh-ucrt-rt_v12-rev0.7z를 다운로드합니다. 64비트 컴파일러입니다.

 

https://github.com/niXman/mingw-builds-binaries/releases 

 




압축을 풀어 C:\mingw64에 복사해줍니다.  해당 경로로 이동시 다음처럼 보여야 합니다. 

 




윈도우 키 + R을 눌러서 보이는 실행창에서 sysdm.cpl를 입력하고 엔터를 누릅니다. 

 




고급 탭을 클릭하고 아래 보이는 환경 변수 버튼을 클릭합니다. 

 




시스템 변수에서 Path를 선택하고 편집 버튼을 클릭합니다. 

 




새로 만들기 버튼을 클릭한 후.. 맨 아래에 다음 경로를 입력합니다.

 

C:\mingw64\bin

 




윈도우 키 + R을 입력 후, cmd 엔터를 눌러서 실행되는 명령 프롬프트 창에서 

다음처럼 gcc -v 명령이 실행 가능해지는지 확인하세요.

 




1.2. Ubuntu

 

build-essential 패키지를 설치하면 gcc, g++ 등 컴파일에 필요한 패키지들이 설치됩니다.

 

$ sudo apt-get install  build-essential



2. Visual Studio Code 설치

다음 포스팅을 참고하여 진행하세요.  

https://bit.ly/1158-2 

 


          Visual Studio Code 설치하는 방법( Windows / Ubuntu )
          https://webnautes.tistory.com/1841




여기서부터는 윈도우와 우분투에서 똑같이 진행하면 됩니다.

유저 인터페이스 언어를 한글로 바꾸려면 Ctrl + Shift + P를 누르고 입력창이 보이면 display를 입력하고 엔터를 누릅니다.

 



한국어를 선택합니다.

 



Restart 버튼을 클릭하여 Visual Studio Code를 재시작하면 유저 인터페이스가 한글로 변경됩니다. 

 




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

Hello, World!를 출력하는 프로그램 코드를 작성하여 Visual Studio Code에서 C/C++ 코드를 컴파일하고 실행하는 방법을 알아봅니다. 

 

3-1. 왼쪽에 위치한 액티비티 바에서 탐색기 아이콘을 클릭하거나, 단축키 Ctrl + Shift + E를 누르면 아래 캡쳐화면처럼 사이드바에 탐색기가 열립니다.

 




3-2. 탐색기에서 폴더 열기를 클릭합니다.

 




3-3.  윈도우의 경우에는 왼쪽 위에 보이는 “새 폴더”를 클릭하여 “C_C++_Projects” 이름의 폴더를 생성합니다. 

( 이름에 빈칸이나 & 등을 쓸수 없는 제약이 있습니다. )

 

생성된 C_C++_Projects 폴더를 선택하고 폴더 선택 버튼을 클릭합니다.

 




우분투의 경우에는 로그인 사용자 폴더로 이동한 후  폴더 만들기를 클릭하여  C_C++_Projects 이름의 폴더를 생성합니다. 

생성된 폴더로 이동한 후 확인 버튼을 클릭합니다.

 




다음처럼 오른쪽 위에 아이콘이 보일 수도 있습니다.

 





3-4. 탐색기에 C_C++_PROJECTS 폴더가 추가되었습니다.

 

 

“예, 작성자를 신뢰합니다”를 클릭합니다.

 



3-5. C와 C++ 소스 코드 파일를 위한 별도의 하위 폴더를 생성하도록 하겠습니다.

우선 C언어를 위한 폴더를 생성합니다. 생성된 폴더에 마우스 커서를 가져가면 보이는새 폴더” 아이콘을 클릭합니다.

 




3-6. helloworld를 입력하고 엔터를 눌러서 helloworld 폴더를 생성합니다.

 




3-7. “새 파일” 아이콘을 클릭합니다.

 




3-8. hello.c를 입력하고 엔터를 눌러서  파일을 생성합니다. 편집기 영역에  hello.c 파일이 열립니다.

 




오른쪽 아래에 C/C++ 확장 권장 메시지 박스가 보이면 Install 또는 설치를 클릭하여 설치합니다.

 



3-9. hello.c 파일에 다음 코드를 입력합니다. https://bit.ly/1158-3 

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
    return 0;
}




3-10. 입력 후, 탭에 표시된 파일 이름 옆에 하얀색 동그라미가 표시됩니다.

 




Ctrl + S를 눌러 저장하면 하얀색 곱하기 표시로 변합니다.

 




3-11. 이번엔 C++ 코드를 위한 폴더를 생성합니다. 

아래 캡쳐화면처럼 빈 공간(빨간색 사각형 부분)을 클릭합니다.

그러면 helloworld 폴더에 대한 선택이 해제됩니다. 

 




3-12. C_C++_PROJECTS에 마우스 커서를 가져가면 보이는 “새폴더 아이콘”을 클릭합니다. 

 




3-13. helloworldcpp를 입력하고 엔터를 눌러서 폴더를 생성합니다. 

 




3-14. 이제 helloworldcpp가 선택된 상태입니다.  C_C++_PROJECTS 옆에 보이는 새파일 아이콘을 클릭하면 helloworldcpp 폴더에 파일을 추가됩니다. hello.cpp를 입력 후 엔터를 누르면 캡쳐화면처럼 파일이 생성됩니다. 

 




3-15. 다음 내용을 hello.cpp 파일에 입력하고 Ctrl + S를 눌러서 저장합니다. https://bit.ly/1158-4 

 

#include <iostream>

using namespace std;

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

    return 0;
}




3-16. 현재 탐색기에 있는 파일과 폴더 목록입니다.

 

 

 

 

 

4. C/C++ 언어 지원 설치

4-1. C/C++에 대한 문법 강조(Syntax highlighter)는 기본적으로 지원하고 있습니다. 

하지만 Visual Studio Code에서 C/C++을 제대로 사용하려면 C/C++ 확장을 설치해줘야 합니다. 

 

앞에서 아래와 같은 창이 보여 설치했다면 4.2를 건너뛰고 4.3을 진행하세요.

 




4-2. 아직 C/C++을 위한 확장을 설치하지 않았다면 Ctrl + Shift + X를 누르거나 액티비티 바에서  확장 아이콘을 클릭 후, 입력란에 c/c++을 입력합니다. 

 




검색된 리스트에서 C/C++ Extension Pack항목에 있는 파란색  설치를 클릭합니다.

 




4-3. Visual Studio Code에서 사용할 컴파일러를 설정해줘야 합니다. 

Ctrl + Shift + P를 눌러서 보이는 입력 창에 c/c++을 입력한 후, “C/C++: 구성 선택..”을 선택합니다. 

 



구성 편집(UI)를 선택합니다.

 



4-4. IntelliSense 구성이 보입니다.  윈도우의 경우 4-5를 우분투의 경우 4-6을 진행하세요. 

 

4-5. 윈도우의 경우 컴파일러 경로에 MINGW의 컴파일러 3개가 인식됩니다. 

비주얼 스튜디오가 설치되어있다면 해당 컴파일러도 인식됩니다.  

 



헤더파일 인식하여 작성한 코드에 유용한 정보를 제공하기 위해 필요한 작업입니다. 

사용하는 언어가 C이면 gcc, 사용하는 언어가 C++이면 g++을 선택해주세요. 

하나의 폴더에서 두 언어 다 사용하는 경우에는 g++을 선택해도 무방할 듯합니다. 

 

 

4-6. 우분투의 경우에도 컴파일러들이 인식됩니다. 

헤더파일 인식하여 작성한 코드에 유용한 정보를 제공하기 위해 필요한 작업입니다. 

사용하는 언어가 C이면 gcc, 사용하는 언어가 C++이면 g++을 선택해주세요. 

하나의 폴더에서 두 언어 다 사용하는 경우에는 g++을 선택해도 무방할 듯합니다. 

 



4-7. 윈도우/우분투 공통부분입니다. 

IntelliSense 모드로 사용하는 운영체제에 따라서  windows-gcc-x64 또는 linux-gcc-x64를 선택하세요. 

 



추가로 사용할 헤더파일의 경로를 추가해주면 비주얼 스튜디어 코드에서 인식하게 됩니다. 

 



사용할 C 및 C++ 표준을 지정할 수 있습니다.

 



4-8. 설정이 자동으로 저장되므로 현재 탭을 닫아도 됩니다. 

 




4-9. 탐색기를 보면 .vscode 폴더에 c_cpp_properties.json파일이 추가되어 있습니다.

 




4-10. 이 파일을 직접 수정할 수도 있습니다. 앞에서 진행했던 설정들이 텍스트로 보입니다. 

 

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "compilerPath": "C:/mingw64/bin/g++.exe",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}




5. 코드 컴파일 및 실행

 

5-1. 소스 코드를 선택한 상태에서  Visual Studio Code의 메뉴에서 터미널 > 작업 구성을 선택합니다.




5-2. 템플릿에서 tasks.json 파일 만들기를 선택합니다.

 



Others를 선택합니다.

 




5-3. 탐색기의 .vscode 폴더에   tasks.json 파일이 추가되고 편집기에서 해당 파일이 열립니다.

 




5-4. tasks.json 내용을 다음 내용으로 교체하고 Ctrl + S를 눌러서 저장합니다. https://bit.ly/1158-5 

 

컴파일과 실행을 분리한 버전과 컴파일과 실행이 하나로 합쳐진 두가지 버전이 있습니다.



컴파일과 실행이 분리된 버전

 

윈도우

 

{
    "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}"
            ]
   
        }
    ]
}



우분투에선 다음처럼 수정하세요.

 

        // 바이너리 실행(Ubuntu)
        {
            "label": "execute",
            "command": "${fileDirname}/${fileBasenameNoExtension}",
            "group": "test"
        }
        // 바이너리 실행(Windows)
        //{
        //    "label": "execute",
        //    "command": "cmd",
        //    "group": "test",
        //    "args": [
        //        "/C", "${fileDirname}\\${fileBasenameNoExtension}"
        //    ]
   
        // }




컴파일과 실행 합쳐진 버전

 

윈도우

 

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation" : { "reveal": "always" },
    "tasks": [
          //C++ 컴파일
          {
            "label": "save and compile for C++",
            "command": "g++ ${file} -o ${fileDirname}/${fileBasenameNoExtension} && cmd /C ${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 ${file} -o ${fileDirname}/${fileBasenameNoExtension} && cmd /C ${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
                }
            }
        }

    ]
}



우분투

 

{
    "version": "2.0.0",
    "runner": "terminal",
    "type": "shell",
    "echoCommand": true,
    "presentation" : { "reveal": "always" },
    "tasks": [
          //C++ 컴파일
          {
            "label": "save and compile for C++",
            "command": "g++ ${file} -o ${fileDirname}/${fileBasenameNoExtension} && ${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 ${file} -o ${fileDirname}/${fileBasenameNoExtension} && ${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
                }
            }
        }

    ]
}





5-6. 단축키를 설정해줍니다.   메뉴에서 파일 > 기본 설정 > 바로 가기 키를 선택합니다. 

이미 설정되어 있는 단축키 목록을 보여줍니다. 

 

사용자 정의로 바로 가기 키를 추가해야 합니다. 캡처화면에 빨간색 사각형으로 표시한 아이콘을 클릭합니다.

 




5-7. 다음처럼 입력하고 Ctrl + S를 눌러서 저장합니다. Visual Studio Code에서 사용중인 단축키를 무시하고 현재 입력한 값이 우선 적용됩니다.

(단, 우분투의 경우 데스크톱 환경의 단축키가 우선입니다. 다른 곳에서 사용하지 않는 단축키를 사용해야 합니다.) https://bit.ly/1158-6 

 

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




윈도우에서만 진행하세요. 터미널에서 사용하는 것을 파워쉘에서 명령 프롬프트로 변경해야 합니다. 

이미 명령 프롬프트를 사용하고 있을 수도 있습니다. 



Ctrl + Shift + P를 누르고 터미널 : 기본 프로필 선택을 클릭합니다.

 



Command Prompt를 선택합니다. 

 




5-8. 탐색기에서 hello.c를 선택하고 Ctrl +Alt + C를 누르면 보이는 항목에서 save and compile for C를 선택합니다.

 



편집 중이던 모든 파일이 저장되고 앞에서 터미널컴파일 진행결과가 보입니다.

문제없이 컴파일이 진행되어다면 윈도우에선 왼쪽 탐색기에 컴파일 결과물인 hello.exe 파일이 보입니다. 

 

 

문제없이 컴파일이 진행되어다면 리눅스에선 왼쪽 탐색기에 컴파일 결과물인 hello 파일이 보입니다. 

 




Ctrl  + Alt + R을 누르면 보이는 execute를 선택합니다.

 



실행 결과가 터미널에 보여집니다.

 

 




5-9. 탐색기에서 hello.cpp를 선택하고 Ctrl +Alt + C를 누르면 보이는 항목에서 save and compile for C++를 선택합니다.

 



편집 중이던 모든 파일이이 저장되고 앞에서 터미널컴파일 진행결과가 보입니다.

문제없이 컴파일이 진행되어다면 왼쪽 탐색기에 컴파일 결과물인 hello.exe 파일이 보입니다. 

 

 

문제없이 컴파일이 진행되어다면 리눅스에선 왼쪽 탐색기에 컴파일 결과물인 hello 파일이 보입니다. 

 




Ctrl  + Alt + R을 누르면 보이는 execute를 선택합니다.

 



실행 결과가 터미널에 보여집니다.

 




참고로 소스 코드별로 별도의 폴더를 생성하지 않고 하나의 폴더에 여러 개의 소스코드를 작성하여 컴파일 하는 것도 가능합니다.

 




Visual Studio Code에서 파일을 저장하거나 불러올때 부모 폴더를 기준으로 하기 때문에 하나의 폴더에 여러 개의 서브 폴더를 두고 프로젝트를 관리시 번거로운 점이 있습니다. 

현재 실행 파일의 위치를 확인하여 파일을 저장하거나 불러오면 이런 점이 해결됩니다. 다음 포스트를 참고하세요.  

C/C++ - 실행 파일의 절대 경로 얻는 방법 ( realpath, GetModuleFileName )
https://webnautes.tistory.com/1871

 

 

6. 한글 입출력 예제 

 

6-1. 리눅스에서는 유니코드(UTF8)을 사용하기 때문에 인코딩을 바꿀 필요가 없습니다.  6-2번을 진행하세요.

윈도우에서 아래처럼 진행했는데 한글이 깨지는 경우 윈도우를 업데이트 해보세요..

 

메뉴에서 파일 > 기본설정 > 설정 을 선택합니다.

encoding을 검색하여 Encoding 항목을 Korean(EUC-KR)로 변경합니다.

 



6-2. 다음 예제를 새로운 파일로 저장하여 실행시켜보면  https://bit.ly/1158-7 

 

#include <stdio.h>

int main()
{
    printf("문자열을 입력후 엔터를 누르세요!\n");

    char a[256];
    scanf("%s", a);

    printf(" \" %s \" 를 입력하셨네요.\n", a);
    return 0;
}



주의할 점은 기존 파일이 아닌 새로운 파일을 열어서 해야 합니다. 인코딩이 EUC-KR로 바뀐 후, 생성된 파일에서 해야 한글이 깨지지 않기 때문입니다. 테스트할 소스코드가 열린상태에서 오른쪽아래에 EUC-KR로 설정된 상태인지 확인하세요.

 




다음처럼 코드에 입력한 한글 문자열 출력과 입력한 문자열에 대한 출력이 모두 정상인 것을 볼 수 있습니다.



7. 디버깅하는 방법

진행하기 전에 위에서 작업했던 일부를 수정해야 합니다. 

프로젝트 폴더의 .vscode 폴더에 있는 tasks.json 파일을 열어서 아래 스크린샷처럼 수정하여 컴파일 시 디버그 정보를 포함하도록 합니다. 

 



7-A C++ 언어 디버깅

 

7-1. 테스트 해보기 위해서 새로운 하위 폴더를 생성하여 main.cpp 파일을 추가합니다. https://bit.ly/1158-8 

먼저 C++ 파일의 경우부터 보겠습니다.

#include <iostream>

using namespace std;

int c = 0;
int d = 100;

int main()
{
    int a = 2;
    int b = 2;
    int c = a + b;

    cout << a << " + " << b << " = " << c << endl;

    return 0;
}









숫자 5 왼쪽으로 마우스 커서를 이동 후. 마우스 왼쪽 버튼을 누르면 숫자 5 왼쪽에 빨간점이 표시됩니다.

디버깅이 시작되면 잠시 멈추게되는 브레이크 포인트입니다. 

 



7-2.  F5를 누릅니다. 메뉴에서 C++(GDB/LLDB)를 선택합니다.

 



컴파일러 경로가 있는 g++.exe를 선택합니다. 

 

 



잠시 기다리면 디버깅이 시작됩니다. 

F11을 눌러서 다음 줄이 실행되게 할 수 있습니다. 

왼쪽에 보이는 변수 창에 지역 변수가 업데이트 됩니다. 

 





7-3. 7-2 작업은 한번만 해주면 됩니다. 이후에는 브레이크 포인트를 지정하고 F5를 누르면  디버깅이 시작됩니다. 




7-4. main함수 에서 사용하는 전역 변수 c는 변수 항목의 Locals에 추가되었는데 

전역변수 d의 경우에는 추가되어 있지 않습니다. 

 



전역 변수의 값을 보려면 왼쪽에 보이는 조사식에 마우스 커서를 가져가면 보이는 + 아이콘을 클릭하고 

 



전역 변수 이름을 입력후 엔터를 누르면

 



해당 전역 변수의 값이 보입니다.

 




최근 .vscode 폴더에 launch.json 파일이 생성되지 않더라도 디버깅이 가능하도록 바뀌었는데 놓치고 있었네요.  따로 launch.json 파일을 생성할 필요도 없습니다. 혹 launch.json 파일이 필요하면 메뉴에서 실행 > 구성추가를 선택하면 됩니다.

 




7-B C언어 디버깅

 

별도의 추가 작업 없이 동일하게 디버깅이 가능했습니다. 






8. CMake를 사용하여 둘 이상의 소스 코드 파일로 구성된 프로젝트 컴파일하기



Visual Studio Code에서 CMake를 사용한 C/C++ 프로젝트 생성하기

https://webnautes.tistory.com/2310 




9. Make를 사용한 프로젝트 컴파일하기

 

Visual Studio Code에서 C/C++ 프로그래밍 with Makefile ( Windows/Ubuntu)

https://webnautes.tistory.com/2068 




반응형