ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Visual Studio Code에서 C/C++ 프로그래밍( Windows / Ubuntu)
    개발 환경/C, C++ 2019.08.20 14:45



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

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


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

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

    현재 문서는 Visual Studio Code 1.37.0에서 테스트 한 결과입니다. 




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


    2. Visual Studio Code 설치


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


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


    5. 코드 컴파일 및 실행


    6. 한글 입출력 예제 


    7. 디버깅하는 방법




    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를 위한 부분 업데이트




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

    1.1. Windows 


    아래 링크에서 다운로드 받아 설치하세요. 

    https://sourceforge.net/projects/mingw-w64/ 



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





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





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





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

    경로에서 파란 부분은 64비트 아키텍처를 사용한 경우 Program Files로 변경되며

    빨간 부분은 설치한 mingw 버전에 따라 차이가 있을 수 있으니 확인해보고 진행하세요. 


    C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin

     



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

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





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


    윈도우용 gcc, g++ 컴파일러를 사용하기 위해 MinGW 설치하는 방법

    http://webnautes.tistory.com/1196




    1.2. Ubuntu


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


    $ sudo apt-get install  build-essential


    webnautes@webnautes-pc:~$ sudo apt-get install  build-essential
    패키지 목록을 읽는 중입니다... 완료
    의존성 트리를 만드는 중입니다      
    상태 정보를 읽는 중입니다... 완료
    다음의 추가 패키지가 설치될 것입니다 :
      g++ g++-7 gcc
    제안하는 패키지:
      g++-multilib g++-7-multilib gcc-7-doc libstdc++6-7-dbg gcc-multilib flex
      bison gcc-doc
    다음 새 패키지를 설치할 것입니다:
      build-essential g++ g++-7 gcc
    0개 업그레이드, 4개 새로 설치, 0개 제거 및 81개 업그레이드 안 함.
    7,577 k바이트 아카이브를 받아야 합니다.
    이 작업 후 25.0 M바이트의 디스크 공간을 더 사용하게 됩니다.
    계속 하시겠습니까? [Y/n] 




    2. Visual Studio Code 설치

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




    Visual Studio Code 설치하는 방법( Windows / Ubuntu )

    http://webnautes.tistory.com/1197 





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

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




    Install additional languages를 선택합니다.




    Korean Language Pack을 선택하고 초록색 Install 버튼을 클릭하여 설치합니다. 




    설치 완료 후, 설정을 반영하기 위해 비주얼 스튜디오 코드를 종료했다가 다시 실행합니다. 



    설치 완료후 Visual Studio Code를 종료했다가 다시 시작하면 유저 인터페이스가 한글로 변경됩니다. 





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

    Hello, World!를 출력하는 프로그램 코드를 작성해보겠습니다. 


    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 파일에 다음 코드를 입력합니다.


    #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를 눌러서 저장합니다. 


    #include <iostream>

    using namespace std;

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


        return 0;
    }




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




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

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


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

    글 작성 시점에서 다음 기능을 제공하고 있습니다.


    Language service


    • Code Formatting (clang-format)

    • Auto-Completion (experimental)

    • Symbol Searching

    • Go to Definition/Declaration

    • Peek Definition/Declaration

    • Class/Method Navigation

    • Signature Help

    • Quick Info (Hover)

    • Error Squiggles



    Debugging


    • Support for debugging Windows (PDB, Mingw/Cygwin), Linux and OS X applications

    • Line by line code stepping

    • Breakpoints (including conditional and function breakpoints)

    • Variable inspection

    • Multi-threaded debugging support

    • Core dump debugging support

    • Executing GDB or MI commands directly when using 'C++ (GDB/LLDB)' debugging environment

    • For help configuring the debugger see Configuring launch.json for C/C++ debugging on our GitHub page.



    앞에서 오른쪽 아래와 같은 창이 보여 설치했다면 진행할 필요가 없습니다.



    설치 창이 보이지 않았다면

    Ctrl + Shift + X를 누르거나 액티비티 바에서  확장 아이콘을 클릭 후, 입력란에 c/c++을 입력합니다. 





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





    설치한 확장을 적용시키기 위해  비주얼 스튜디오 코드를 종료시켰다가 다시 실행합니다. 



    5. 코드 컴파일 및 실행

    Task Runner를 사용하면 Code Runner 확장을 사용할 때와 달리 상세한 컴파일 설정이 가능합니다. 



    5-1. Visual Studio Code의 메뉴에서 터미널 > 기본 빌드 작업 구성을 선택합니다.



    5-2. C/C++:gcc.exe build active file를 선택합니다. 

    3가지 선택가능한 항목이 있지만 gcc를 선택해도 사용하는데 문제 없습니다.





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




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


    {
        "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": "cd ${fileDirname} && ./${fileBasenameNoExtension}",
            // "group": "test"
            // }
            // 바이너리 실행(Windows)
            {
                "label": "execute",
                "command": "cmd",
                "group": "test",
                "args": [
                    "/C", "${fileDirname}\\${fileBasenameNoExtension}"
                ]
       
            }
        ]
    }




    우분투의 경우에는 아래처럼 수정해서 사용하세요.


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





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

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


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





    5-7. 다음처럼 입력하고 Ctrl + S를 눌러서 저장합니다. 기본값을 무시하고 현재 입력한 값이 우선 적용됩니다.

    (단 우분투의 경우 데스크톱 환경의 단축키가 우선입니다. 다른 곳에서 사용하지 않는 단축키를 사용해야 합니다.)


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




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




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

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





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




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





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




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

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




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




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




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





    6. 한글 입출력 예제 


    6-1. 리눅스 환경이라면 별다른 설정 변경없이 진행가능합니다. 7를 진행하세요.


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


    현재 최신 버전인 Windows 10 버전 1903(빌드 18362.295)에선 한글 깨짐현상이 없습니다.

    윈도우 버전 확인은 윈도우키 + R을 눌러 실행창에서  winver를 실행하면 확인할 수 있습니다. 




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


    검색 창에 encoding를 입력하면 관련 옵션만 아래쪽에 보입니다. Files: Encoding 항목에 있는 utf8을 euckr로 변경합니다.




    새로 만든 파일부터 euckr로 저장됩니다. 


    다음 예제를 실행시켜보면 


    #include <stdio.h>

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

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

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



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





    7. 디버깅하는 방법

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

    프로젝트 폴더의 .vscode 폴더에 있는 tasks.json 파일을 열어서 컴파일 시 디버그 정보를 포함하도록 합니다. 




    7.A C++


    7-1. 테스트 해보기 위해서 새로운 하위 폴더를 생성하여 add.cpp 파일을 추가합니다. 

    먼저 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;
    }






    7-2. 왼쪽 사이드바에서 디버그 아이콘을 클릭합니다. 





    7-3. 설정 아이콘을 클릭합니다.




    메뉴에서 C++(GDB/LLDB)를 선택합니다. 




    g++.exe build and debug active file을 선택합니다.

    gcc를 선택하면 에러가 납니다.






    7-4. launch.json 파일이 열립니다. 


     노란색 줄들을 수정합니다.

    정말 감사합니다!!!님이 알려주셔서 매번 디버깅할때마다 프로그램 이름을 바꿔적을 필요가 없어졌습니다.  


    이제는 다음처럼 자동으로 입력됩니다. 수정할 필요가 없어졌습니다. 

    최신 버전의 Visual Studio Code에만 해당되는 사항일 듯합니다. 참고로 버전 1.37.0을 사용했습니다.



    윈도우의 경우 다음처럼 보입니다. 수정할 필요가 없습니다. 


    {
        // IntelliSense를 사용하여 가능한 특성에 대해 알아보세요.
        // 기존 특성에 대한 설명을 보려면 가리킵니다.
        // 자세한 내용을 보려면 https://go.microsoft.com/fwlink/?linkid=830387을(를) 방문하세요.
        "version": "0.2.0",
        "configurations": [
            {
                "name": "g++.exe build and debug active file",
                "type": "cppdbg",
                "request": "launch",
                "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "MIMode": "gdb",
                "miDebuggerPath": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\gdb.exe",
                "setupCommands": [
                    {
                        "description": "Enable pretty-printing for gdb",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "g++.exe build active file"
            }
        ]
    }



    우분투의 경우 다음처럼 보입니다. 수정할 필요가 없습니다. 



    프로젝트 폴더의 .vscode 폴더에 launch.json 파일로  저장되기 때문에 언제든 수정이 가능합니다.





    7-5. 원하는 줄번호 왼쪽을 클릭하면 빨간점으로  브레이크포인트가 추가됩니다.





    7-6. Ctrl + Alt + C를 누르고 “save and compile for C++”를 선택해서 컴파일을 진행합니다.





    7-7. F5를 눌러서 디버깅을 시작합니다.


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

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




    이 경우 조사식에 마우스 커서를 가져가면 보이는 + 아이콘을 클릭하고 




    추가할 변수 이름을 입력후 엔터를 누르면




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




     7-8. F11를 눌러서 한줄씩 실행을 합니다.

    변수 항목과 호출 스택 항목이 업데이트 됩니다. 





    7.B C


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




    혹시 문제가 생기면 7-3에서  선택했던 다음 항목을 gcc.exe build and debug active file로 바꾸어서 진행 해보세요.





    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 후원 또는 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구 독 하 기
    후 원 하 기


    댓글 231

Designed by Tistory.