C++ Hello World | "처음 시작하는 분을 위한" 입문 가이드

C++ Hello World | "처음 시작하는 분을 위한" 입문 가이드

이 글의 핵심

C++ Hello World에 대해 정리한 개발 블로그 글입니다. C++ 학습의 첫 단계는 "Hello, World!" 프로그램입니다. 컴파일러 설치, 코드 작성, 컴파일, 실행의 전체 과정을 환경별로 안내하고, #include·main·cout·endl까지 한 줄씩 설명하며, g++ 옵션과 첫 수정 실습으로 이어집니다.

Hello World가 중요한 이유

처음 C++을 맞이하면 도구 설치와 빌드 명령이 낯설 수 있습니다. 이 글에서는 최소한의 프로그램으로 성공 경험을 쌓은 뒤, 환경별로 확장해 나갈 수 있도록 구성했습니다.

C++ 학습의 첫 단계는 “Hello, World!” 프로그램입니다. 간단해 보이지만 컴파일러 설치, 코드 작성, 컴파일, 실행의 전체 과정을 경험할 수 있습니다.

개발 환경 설정

이 글의 예제는 터미널에서 g++로 컴파일하는 흐름을 기준으로 설명합니다. 통합 개발 환경(IDE)만 쓰는 경우에도, 아래 단계를 한 번쯤 따라 해 보면 “소스 파일 → 실행 파일”이 어떻게 만들어지는지 이해하는 데 도움이 됩니다.

Windows: MinGW-w64 (g++)

  1. MSYS2를 설치한 뒤, MSYS2 터미널에서 패키지를 갱신합니다.
    pacman -Syu
  2. MinGW-w64 도구체인을 설치합니다.
    pacman -S mingw-w64-ucrt-x86_64-gcc
  3. 설치 경로의 bin 폴더(예: C:\msys64\ucrt64\bin)를 시스템 환경 변수 PATH에 추가합니다.
  4. 새 터미널에서 g++ --version이 출력되는지 확인합니다.

참고: WSL(Windows Subsystem for Linux)을 쓰면 Linux와 동일하게 apt 등으로 g++를 설치할 수 있습니다.

Windows: Visual Studio (MSVC)

  1. Visual Studio Community 설치 프로그램을 실행합니다.
  2. 워크로드에서 “C++를 사용한 데스크톱 개발”을 선택합니다. (Windows SDK, MSVC 도구가 함께 설치됩니다.)
  3. 새 프로젝트에서 콘솔 앱을 만들고, 생성된 main.cpp에 예제 코드를 붙여 넣어 빌드·실행합니다.

Visual Studio는 파일 탐색기에서 cl.exe 쓰기보다, 위 워크로드로 제공되는 개발자 명령 프롬프트 또는 IDE 안의 빌드가 가장 단순합니다.

Mac: Xcode Command Line Tools

  1. 터미널을 열고 다음을 실행합니다.
    xcode-select --install
  2. 안내 창에서 설치를 완료합니다. Apple이 제공하는 clang 기반 도구가 포함됩니다.
  3. 확인:
    g++ --version
    # 또는
    clang++ --version

GUI 앱 개발이 목적이 아니라면, 전체 Xcode가 아니라 Command Line Tools만으로도 Hello World와 컴파일 학습은 충분합니다.

Linux: g++ 또는 clang++

배포판에 따라 패키지 이름이 조금 다릅니다.

Debian / Ubuntu 계열

sudo apt update
sudo apt install build-essential
g++ --version

Fedora

sudo dnf install gcc-c++
g++ --version

Arch Linux

sudo pacman -S gcc
g++ --version

clang++를 쓰고 싶다면 배포판에 맞는 clang 패키지를 설치하면 됩니다. Hello World 수준에서는 g++clang++ 명령만 바꾸면 대부분 동일하게 동작합니다.

Visual Studio Code 설정

VS Code는 편집기일 뿐이므로, 위에서 설치한 컴파일러(g++ 또는 MSVC)가 먼저 동작해야 합니다.

  1. 확장 프로그램: C/C++ (Microsoft) 설치.
  2. 폴더 열기: hello.cpp가 있는 폴더를 워크스페이스로 엽니다.
  3. 터미널 통합: Ctrl+` (Mac: Ctrl+` 또는 ⌃`)로 터미널을 열고, 아래처럼 컴파일·실행합니다.
    g++ -std=c++17 -Wall -o hello hello.cpp
    ./hello
  4. 자동 빌드(선택): 터미널 → 기본 빌드 작업 구성으로 tasks.json을 만들면 g++ 명령을 단축키로 실행할 수 있습니다. 최소 예시는 다음과 같습니다.
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build hello",
      "type": "shell",
      "command": "g++",
      "args": ["-std=c++17", "-Wall", "-o", "hello", "hello.cpp"],
      "group": { "kind": "build", "isDefault": true }
    }
  ]
}

파일 이름이 다르면 argshello.cpp-o 뒤 실행 파일 이름을 맞춥니다.

환경별 빠른 요약

환경컴파일러 준비이 글의 예제 실행
WindowsMinGW-w64(g++) 또는 Visual Studiog++ ... 또는 VS에서 빌드
MacCommand Line Tools터미널에서 g++ 또는 clang++
Linuxbuild-essentialg++ 또는 clang++

우리가 만들 첫 프로그램

아래는 이 글에서 계속 사용하는 기본 Hello World입니다. 앞으로 설명은 이 코드를 기준으로 합니다.

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

코드 한 줄씩 설명하기

#include <iostream>이 하는 일

  • #include다른 파일의 내용을 이 위치에 붙여 넣으라는 전처리기 지시문입니다.
  • <iostream>표준 입출력 스트림을 다루는 헤더입니다. 여기에 std::cout, std::cin, std::endl 등이 선언되어 있습니다.
  • 헤더를 빼먹으면 cout 같은 이름을 컴파일러가 모릅니다. 오타(iosteam 등)도 흔한 에러 원인입니다.

using namespace std 논쟁

std::를 매번 쓰기 싫다면 아래처럼 쓸 수 있습니다.

#include <iostream>
using namespace std;

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

장점: 타이핑이 줄어듭니다.
단점: std 안에 수많은 이름이 있어서, 프로젝트가 커지면 이름이 충돌할 수 있습니다. 또한 교재·예제가 어떤 이름을 쓰는지 한눈에 보기 어려워질 수 있습니다.

실무·학습에서의 관용: 짧은 예제·시험용 코드에서는 using namespace std;가 자주 보입니다. 반면 헤더 파일(.h)에서는 거의 쓰지 않는 것이 좋고, 큰 프로젝트에서는 using std::cout;처럼 필요한 것만 골라 쓰거나 std::를 유지하는 편이 안전합니다. 이 글은 초보자가 헷갈리지 않도록 std::를 붙인 형태를 기본으로 두었습니다.

int main()과 반환값

  • C++ 프로그램은 실행 시작점으로 main 함수를 둡니다. 운영체제가 프로그램을 시작할 때 main을 호출합니다.
  • 반환 타입을 int로 두는 것이 표준에 맞는 일반적인 형태입니다. return 0;정상 종료를 뜻하는 관례입니다. (0이 아닌 값은 실패·오류 코드로 쓰는 경우가 많습니다.)
  • main에서 return을 생략하면 컴파일러가 0을 반환한 것으로 처리하는 규칙도 있지만, 입문 단계에서는 명시적으로 return 0;을 쓰는 습관을 들이면 좋습니다.

std::cout<< 연산자

  • std::cout표준 출력(보통 터미널 화면)으로 보내는 스트림 객체입니다.
  • <<는 “왼쪽 스트림에 오른쪽 값을 출력하라”는 의미로 쓰이는 스트림 삽입 연산자입니다. 여러 개를 이어서 쓸 수 있습니다.
    std::cout << "값: " << 42 << std::endl;

std::endl'\n'

  • std::endl줄바꿈 문자를 출력하고, 동시에 출력 버퍼를 비웁니다(flush).
  • 단순히 줄만 바꾸면 될 때는 '\n'만 쓰는 경우가 많습니다. 반복문 안에서 매번 flush하면 불필요하게 느려질 수 있기 때문입니다.
  • 즉시 화면에 반드시 찍혀야 할 때(예: 진행 로그를 디버깅할 때)만 endl의 flush가 유용할 수 있습니다.
std::cout << "Hello\n";           // 줄바꿈만 (대부분의 입문 예제에 적합)
std::cout << "Hello" << std::endl; // 줄바꿈 + 버퍼 비우기

컴파일과 실행

g++ 명령과 자주 쓰는 옵션

옵션의미
-o 이름만들 실행 파일 이름 지정. 없으면 a.out(Mac/Linux) 또는 a.exe(Windows MinGW) 등 기본 이름이 됩니다.
-std=c++17사용할 C++ 표준 지정. 교재가 C++17을 기준으로 하면 맞춰 주세요.
-Wall자주 쓰는 경고를 켭니다. 초보자일수록 경고를 읽는 연습이 중요합니다.

한 번에 예시:

g++ -std=c++17 -Wall -o hello hello.cpp

실행 파일 실행하기

  • Mac / Linux: 현재 디렉터리는 PATH에 없으므로 ./를 붙입니다.
    ./hello
  • Windows (PowerShell / CMD): 보통 프로젝트 폴더에서:
    hello.exe
    또는 .\hello.exe

컴파일 에러 읽는 법

컴파일러는 대부분 파일 이름, 줄 번호, 에러 이유를 순서대로 알려 줍니다.

  1. 가장 위에 나온 에러부터 고칩니다. 한 군데가 틀리면 그 아래에 연쇄 에러가 쏟아질 수 있습니다.
  2. error:note:를 구분합니다. note는 원인 힌트인 경우가 많습니다.
  3. 따옴표·세미콜론·괄호처럼 작은 실수를 의심합니다.

예시 메시지 패턴:

hello.cpp:5:10: error: expected ';' before '}' token

hello.cpp5번째 줄 근처에서 }가 나오기 전에 ;가 필요하다는 뜻입니다.

첫 수정 실습

같은 hello.cpp를 조금씩 바꿔 보며 출력과 입력을 익혀 봅니다.

여러 줄 출력하기

#include <iostream>

int main() {
    std::cout << "첫 번째 줄\n";
    std::cout << "두 번째 줄\n";
    std::cout << "세 번째 줄\n";
    return 0;
}

변수 사용해 보기

#include <iostream>

int main() {
    int year = 2026;
    std::cout << "올해는 " << year << "년입니다.\n";
    return 0;
}

변수와 자료형을 더 깊게 다룬 글에서 int, double, std::string 등을 이어서 배울 수 있습니다.

사용자 입력 받기 (std::cin)

#include <iostream>

int main() {
    int age = 0;
    std::cout << "나이를 입력하세요: ";
    std::cin >> age;
    std::cout << "입력한 나이는 " << age << "살입니다.\n";
    return 0;
}
  • std::cin표준 입력(키보드)에서 값을 읽습니다.
  • >>스트림 추출 연산자로, 공백을 기준으로 토큰을 나누어 읽는 방식에 익숙해지면 됩니다.

자주 하는 실수

실수 1: iostream 오타

// ❌ 잘못된 코드
#include <iosteam>  // 오타!

// ✅ 올바른 코드
#include <iostream>

실수 2: main 함수 반환 타입

// ❌ 잘못된 코드
void main() {  // void는 표준이 아님
}

// ✅ 올바른 코드
int main() {
    return 0;
}

실수 3: 세미콜론 누락

// ❌ 잘못된 코드
std::cout << "Hello"  // 세미콜론 없음

// ✅ 올바른 코드
std::cout << "Hello";

컴파일 옵션 이해하기 (추가)

기본 컴파일

g++ hello.cpp
# 결과: a.out (Mac/Linux) 또는 a.exe (Windows)

출력 파일명 지정

g++ -o hello hello.cpp
# 결과: hello (실행 파일)

C++ 표준 지정

# C++11
g++ -std=c++11 -o hello hello.cpp

# C++17 (권장)
g++ -std=c++17 -o hello hello.cpp

# C++20
g++ -std=c++20 -o hello hello.cpp

경고 옵션 (권장)

# 모든 경고 표시
g++ -Wall -Wextra -o hello hello.cpp

# 경고를 에러로 처리
g++ -Wall -Wextra -Werror -o hello hello.cpp

온라인 컴파일러 추천

설치 없이 바로 시작하고 싶다면:

  1. Compiler Explorer (godbolt.org)

    • 여러 컴파일러 비교 가능
    • 어셈블리 코드 확인
    • 공유 기능
  2. OnlineGDB (onlinegdb.com)

    • 디버거 포함
    • 입력/출력 테스트 가능
    • 간단한 UI
  3. Replit (replit.com)

    • 프로젝트 저장 가능
    • 협업 기능
    • 무료 호스팅

다음 단계

추천 학습 순서

  1. 이 글: Hello World, 컴파일·실행, cout / cin 맛보기.
  2. 변수와 자료형: int, double, std::string, 형변환.
  3. 조건문·반복문: 분기와 반복으로 프로그램 흐름 제어.
  4. 함수: 나누어 쓰기와 재사용.

코드로 미리 보는 다음 단계

1단계: 변수 배우기

int age = 25;
double height = 175.5;
std::string name = "홍길동";

2단계: 입력 받기

int age;
std::cout << "나이를 입력하세요: ";
std::cin >> age;
std::cout << "당신의 나이는 " << age << "살입니다." << std::endl;

3단계: 조건문

if (age >= 20) {
    std::cout << "성인입니다." << std::endl;
} else {
    std::cout << "미성년자입니다." << std::endl;
}

4단계: 반복문

for (int i = 1; i <= 10; i++) {
    std::cout << i << std::endl;
}

변수와 자료형을 본격적으로 다루려면 C++ 변수와 자료형 | int, double, string 완벽 정리 [초보자용] 을 이어서 읽는 것을 추천합니다.

FAQ

Q1: “Hello, World!”는 왜 항상 첫 프로그램인가요?

A: 1978년 Brian Kernighan이 쓴 C 언어 책에서 시작된 전통입니다. 가장 간단하면서도 컴파일러 설치부터 실행까지 전체 과정을 확인할 수 있어서 첫 프로그램으로 완벽합니다.

Q2: std::cout에서 std::는 무엇인가요?

A: std는 “standard”의 약자로, C++ 표준 라이브러리의 네임스페이스입니다.

네임스페이스 없이 쓰기:

#include <iostream>
using namespace std;  // std:: 생략 가능

int main() {
    cout << "Hello, World!" << endl;  // std:: 없이 사용
    return 0;
}

주의: 큰 프로젝트에서는 using namespace std;를 쓰지 않는 것이 좋습니다 (이름 충돌 방지).

Q3: endl 대신 \n을 써도 되나요?

A: 네, 대부분의 경우 \n이 더 좋습니다.

// 둘 다 가능
std::cout << "Hello" << std::endl;  // 줄바꿈 + 버퍼 비우기
std::cout << "Hello" << '\n';       // 줄바꿈만 (더 빠름)

차이점:

  • endl: 줄바꿈 + 버퍼 비우기 (느림)
  • \n: 줄바꿈만 (빠름)

권장: 일반적으로 \n 사용, 즉시 출력이 필요할 때만 endl

Q4: 컴파일 에러가 나는데 어떻게 하나요?

A: 에러 메시지를 잘 읽어보세요.

자주 나오는 에러:

  1. iostream 철자 오류

    error: iostream: No such file or directory
    → #include <iostream> 철자 확인
  2. 세미콜론 누락

    error: expected ';' before '}'
    → 각 문장 끝에 ; 추가
  3. main 함수 없음

    error: undefined reference to 'main'
    → int main() { } 함수 추가

Q5: Visual Studio Code에서는 어떻게 하나요?

A: VS Code는 에디터이므로 컴파일러를 별도로 설치해야 합니다.

Windows:

  1. MinGW-w64 설치
  2. VS Code에서 C++ Extension 설치
  3. tasks.json으로 빌드 작업 구성 (위 “Visual Studio Code 설정” 참고)

Mac:

  1. Xcode Command Line Tools 설치
  2. VS Code에서 C++ Extension 설치

Linux:

  1. GCC 설치 (sudo apt install g++)
  2. VS Code에서 C++ Extension 설치

간단한 방법: 터미널에서 직접 컴파일

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

Q6: 한글이 깨져요!

A: 인코딩 문제입니다.

해결법:

#include <iostream>
#include <locale>  // 로케일 설정

int main() {
    std::locale::global(std::locale(""));  // 시스템 로케일 사용
    std::cout << "안녕하세요!" << std::endl;
    return 0;
}

또는 파일을 UTF-8로 저장하고:

# Windows (chcp 명령)
chcp 65001

# Mac/Linux (기본 UTF-8)
# 별도 설정 불필요

같이 보면 좋은 글 (내부 링크)

이 주제와 연결되는 다른 글입니다.

  • C++ 변수와 자료형 | int, double, string 완벽 정리 [초보자용]
  • C++ 클래스와 객체 | “초보자를 위한” 완벽 가이드 [그림으로 이해]
  • C++ 함수 | “처음 배우는” 함수 만들기 완벽 가이드 [예제 10개]
  • C++ Redis 클론 | Modern C++ 인메모리 KV 스토어 [#48-1]

관련 글

  • C++ 변수와 자료형 | int, double, string 완벽 정리 [초보자용]
  • C++ 클래스와 객체
  • C++ 초보자가 자주 하는 실수 Top 15 | 컴파일 에러부터 런타임 크래시까지
  • C++ 함수