icon안동민 개발노트

개발 환경 설정


C++ 컴파일러 소개

 C++ 프로그램을 실행하기 위해서는 먼저 소스 코드를 기계어로 변환해야 합니다.

 이 작업을 수행하는 것이 컴파일러입니다.

주요 C++ 컴파일러는 다음과 같습니다.

GCC (GNU Compiler Collection)

  • 가장 널리 사용되는 오픈 소스 컴파일러
  • Linux, macOS, Windows(MinGW) 등 다양한 플랫폼 지원
  • 명령어 예 : g++ -o myprogram myprogram.cpp

Clang

  • LLVM 프로젝트의 일부로 개발된 컴파일러
  • 빠른 컴파일 속도와 명확한 오류 메시지로 유명
  • Apple의 Xcode에 기본 컴파일러로 채택
  • 명령어 예 : clang++ -o myprogram myprogram.cpp

Microsoft Visual C++ Compiler

  • Windows 환경에 최적화된 컴파일러
  • Visual Studio에 포함되어 있음
  • 명령어 예 : cl myprogram.cpp

통합 개발 환경 (IDE) 소개

 IDE는 코드 편집, 컴파일, 디버깅 등의 기능을 통합적으로 제공하는 소프트웨어입니다.

 주요 C++ IDE는 다음과 같습니다.

 1. Visual Studio

  • Microsoft에서 개발한 강력한 IDE
  • 광범위한 기능과 확장성 제공
  • 무료 버전(Community Edition) 사용 가능

 2. Visual Studio Code

  • 경량화된 코드 에디터이지만 확장을 통해 IDE 기능 구현 가능
  • 다양한 언어 지원, 크로스 플랫폼
  • C++ 개발을 위한 확장 팩 제공

 3. CLion

  • JetBrains사에서 개발한 크로스 플랫폼 C/C++ IDE
  • 강력한 코드 분석 및 리팩토링 도구 제공
  • 유료이지만 학생은 무료로 사용 가능

 4. Eclipse CDT

  • 오픈 소스 IDE
  • 풍부한 플러그인 생태계
  • 대규모 프로젝트 관리에 적합

개발 환경 설정 단계 (VSCode)

 1. Visual Studio Code 설치

기타 항목은 모두 체크하는 것을 권장

기타 항목은 모두 체크하는 것을 권장

 2. C++ 확장 팩 설치

C/C++ 확장 설치

C/C++ 확장 설치

  • VS Code 내에서 확장(Extensions) 탭 열기
  • "C/C++" 검색 후 Microsoft의 확장 팩 설치

 3. MinGW 설치 (Windows 환경)

  • MSYS2 페이지에서 최신 설치 프로그램을 다운로드하거나 하이퍼링크를 통해 바로 다운로드할 수 있습니다.
  • 설치 프로그램을 실행하고 설치 마법사의 단계를 따라 진행합니다. (win10 64비트 이상)
  • msys2를 실행하고 아래 명령어를 입력합니다.
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
툴체인 그룹 설치 (Enter)

툴체인 그룹 설치 (Enter)

패키지 설치 (Enter)

패키지 설치 (Enter)

  • Enter를 눌러 툴체인 그룹의 기본 패키지 설치를 수락합니다.

 4. 환경 변수 설정

  • 시스템 환경 변수 편집 > 환경 변수 > Path > 편집
  • MinGW의 bin 폴더 경로 추가
기본값으로 설치했을 경우 경로
C:\msys64\ucrt64\bin

 5. 프로젝트 폴더 생성 및 설정

  • 새 폴더 생성 후 VS Code로 열기
  • .vscode 폴더 내에 c_cpp_properties.json, tasks.jsonlaunch.json 파일 생성 및 설정
  • (선택) settings.jsonextensions.json 파일 생성 및 설정
  • 해당 작업이 번거로우면 템플릿 다운받기
c_cpp_properties.json
{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "compilerPath": "C:/msys64/ucrt64/bin/g++.exe",
      "cStandard": "c17",
      "cppStandard": "c++20",
      "intelliSenseMode": "windows-gcc-x64"
    }
  ],
  "version": 4
}
tasks.json
{
  "tasks": [
    {
      "type": "cppbuild",
      "label": "C/C++: g++.exe 활성 파일 빌드",
      "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
      "args": [
        "-fdiagnostics-color=always",
        "-g",
        "${fileDirname}/*.cpp",
        "-o",
        "${workspaceFolder}/Debug/${fileBasenameNoExtension}.exe"
      ],
      "problemMatcher": ["$gcc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "디버거에서 생성된 작업입니다."
    }
  ],
  "version": "2.0.0"
}
launch.json
{
  "configurations": [
    {
      "name": "C/C++: g++.exe 활성 파일 빌드 및 디버그",
      "type": "cppdbg",
      "request": "launch",
      "program": "${workspaceFolder}/Debug/${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${fileDirname}",
      "environment": [],
      "externalConsole": false,
      "internalConsoleOptions": "neverOpen",
      "MIMode": "gdb",
      "miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe",
      "setupCommands": [
        {
          "description": "gdb에 자동 서식 지정 사용",
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        },
        {
          "description": "디스어셈블리 버전을 Intel(으)로 설정",
          "text": "-gdb-set disassembly-flavor intel",
          "ignoreFailures": true
        }
      ],
      "preLaunchTask": "C/C++: g++.exe 활성 파일 빌드"
    }
  ],
  "version": "2.0.0"
}
(선택) settings.json
{
  "[cpp]": { "editor.defaultFormatter": "ms-vscode.cpptools" },
  "terminal.integrated.defaultProfile.windows": "PowerShell",
  "github.copilot.editor.enableAutoCompletions": false,
  "workbench.colorCustomizations": {
    "terminalCursor.foreground": "#0064FF",
    "terminal.foreground": "#ffffff",
    "terminal.ansiCyan": "#000000"
  },
  "files.exclude": {
    ".vscode": true
  }
}
(선택) extensions.json
{
  "recommendations": ["PKief.material-icon-theme", "ms-vscode.cpptools"],
  "unwantedRecommendations": ["ms-vscode.cpptools-extension-pack"]
}

첫 번째 프로그램 작성 및 실행

 1. 새 파일 생성 (예 : main.cpp)

 2. 다음 코드 입력

#include <iostream>
 
int main() {
    std::cout << "Hello, C++ World!" << std::endl;
    return 0;
}

 3. 파일 저장

 4. 터미널에서 다음 명령어 실행

g++ -o hello main.cpp
./hello

빌드 과정 이해

 C++ 프로그램의 빌드 과정은 다음과 같습니다.

 1. 전처리 (Preprocessing)

  • #include, #define 등의 전처리기 지시문 처리
  • 매크로 확장
  • 조건부 컴파일 처리

 2. 컴파일 (Compilation)

  • 전처리된 코드를 어셈블리 코드로 변환
  • 문법 검사 수행
  • 최적화 수행 (컴파일러 옵션에 따라)

 3. 어셈블 (Assembly)

  • 어셈블리 코드를 객체 파일(.o 또는 .obj)로 변환

 4. 링킹 (Linking)

  • 여러 객체 파일을 하나의 실행 파일로 결합
  • 라이브러리 연결
  • 메모리 주소 할당

디버깅 기초

 디버깅은 프로그램의 오류를 찾고 수정하는 과정입니다. VS Code에서의 기본적인 디버깅 기능은 다음과 같습니다.

 1. 브레이크포인트 설정

  • 코드 라인 왼쪽 클릭으로 설정/해제

 2. 변수 값 확인

  • 디버그 모드에서 변수에 마우스 오버
  • 'Watch' 창에서 변수 추가하여 지속적 모니터링

 3. 단계별 실행

  • Step Over (F10) : 현재 라인 실행 후 다음 라인으로 이동
  • Step Into (F11) : 함수 내부로 진입
  • Step Out (Shift+F11) : 현재 함수에서 빠져나옴

 4. 콜 스택 확인

  • 프로그램의 실행 경로 추적

버전 관리 시스템 소개

 버전 관리 시스템은 소스 코드의 변경 사항을 추적하고 관리하는 도구입니다.

 Git은 가장 널리 사용되는 버전 관리 시스템입니다.

 1. Git 기본 개념

  • Repository : 프로젝트의 모든 파일과 히스토리를 저장하는 저장소
  • Commit : 변경 사항의 스냅샷
  • Branch : 독립적인 작업 라인

 2. 기본 Git 명령어

  • git init : 새 저장소 초기화
  • git add : 변경 사항을 스테이징 영역에 추가
  • git commit : 변경 사항을 저장소에 기록
  • git push : 로컬 변경 사항을 원격 저장소에 업로드
  • git pull : 원격 저장소의 변경 사항을 로컬로 가져오기

 3. GitHub 사용법

  • 계정 생성
  • 새 저장소 생성
  • 로컬 저장소와 원격 저장소 연결
  • 변경 사항 push 및 pull

연습 문제

  1. 여러분의 컴퓨터에 Visual Studio Code와 MinGW(Windows의 경우)를 설치하고 환경 변수를 설정하세요.
  2. "Hello, C++ World!" 프로그램을 작성하고 실행해보세요.
  3. 다음 코드를 입력하고 컴파일 해보세요. 오류가 발생한다면 그 이유를 설명하고 수정해보세요.
#include <iostream>
 
int main() {
    int x = 10;
    std::cout << "x의 값은: " << x << std::endl;
    return 0
}
  1. 간단한 계산기 프로그램을 작성하세요. 사용자로부터 두 개의 숫자와 연산자(+, -, *, /)를 입력받아 결과를 출력하는 프로그램입니다.

 참고자료