← C 강의 목록으로
🧱
기초 (Basic)
C 프로그램 뼈대 · 컴파일 · 실행

1단원 — Hello, World!

C 프로그래밍의 첫 단원입니다. 가장 단순한 프로그램을 통해 **C 프로그램의 뼈대 → 컴파일 → 실행**의 한 사이클을 직접 경험해 봅니다.

printfmaingcc이스케이프
소요 시간
1~2시간
난이도
📊 완전 초보
선수 조건
🎯 시작하기
결과물
gcc 로 hello.c 빌드 + ./hello 실행

이 강의에서 배우는 것

  • 1C 프로그램의 기본 구조(`#include`, `main`, `printf`, `return`)를 이해한다.
  • 2`gcc`로 소스 파일을 컴파일하고 터미널에서 실행할 수 있다.
  • 3이스케이프 시퀀스(`\n`, `\t`)와 주석을 사용할 수 있다.

왜 "Hello World"부터 시작하는가?

처음 보는 프로그램이라도 화면에 한 줄을 띄우는 것까지 성공하면, **환경(컴파일러, PATH, 한글 인코딩)이 정상**이라는 사실이 한 번에 검증됩니다. 그래서 거의 모든 언어 입문서가 이 예제로 시작합니다. "문법을 익힌다"기보다 **개발 사이클을 한 번 돌려보는** 것이 목적입니다.

핵심 개념

1) C 프로그램의 뼈대

c
#include <stdio.h>

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

각 줄을 분해해 봅니다.

요소의미
`#include <stdio.h>`표준 입출력 라이브러리(`printf`) 헤더를 포함시키는 **전처리 지시자**
`int main(void)`운영체제가 가장 먼저 호출하는 **진입점 함수**. 반환형은 `int`
`printf("...\n")`표준 출력(stdout)에 문자열 출력
`return 0;`"정상 종료"를 OS에 알리는 종료 코드 0 반환

2) 컴파일 한 번에 일어나는 4단계

소스 코드 한 파일을 실행 파일로 만드는 과정은 보이지 않지만 4단계로 구성됩니다.

text
hello.c                                              hello (실행파일)
  │                                                       ▲
  │  ① 전처리      ② 컴파일       ③ 어셈블      ④ 링크   │
  └─►  cpp   ─►   cc1     ─►   as       ─►   ld   ──────┘
       (#include 펼침)  (어셈블리 생성)  (오브젝트)  (라이브러리 결합)

`gcc`는 이 네 단계를 한 번에 호출해 줍니다.

3) 이스케이프 시퀀스

문자열 안에서 특수한 동작을 하는 문자들입니다.

표기의미
`\n`줄바꿈 (newline)
`\t`
`\\`역슬래시 자체
`\"`큰따옴표
`\0`널 문자(문자열의 끝)

4) 주석

c
// 한 줄 주석 (C99 이후)
/* 여러 줄
   주석 */

주석은 컴파일러가 무시하므로 실행에 영향을 주지 않습니다.

예제로 보기

예제 1 — `ex01_hello.c` : 가장 단순한 출력

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

**실행 결과**

text
Hello, World!

핵심: `\n`이 없으면 다음 프롬프트가 같은 줄에 붙습니다. 직접 `\n`을 지워 보세요.

예제 2 — `ex02_multiline.c` : 여러 줄 출력과 탭

c
printf("첫 번째 줄\n");
printf("두 번째 줄\n");
printf("탭\t으로 구분\n");
printf("한 번에\n여러 줄\n출력하기\n");

**실행 결과**

text
첫 번째 줄
두 번째 줄
탭	으로 구분
한 번에
여러 줄
출력하기

핵심: `printf` **한 번**에서도 `\n`이 여러 개면 줄이 여러 개로 나옵니다.

예제 3 — `ex03_comments.c` : 주석은 실행되지 않는다

c
// 한 줄 주석
/* printf("이 줄은 출력되지 않습니다."); */
printf("주석은 컴파일에 영향을 주지 않습니다.\n");

**실행 결과**

text
주석은 컴파일에 영향을 주지 않습니다.

핵심: 코드를 임시로 비활성화할 때 주석으로 감싸는 일이 잦습니다.

다른 시각으로 보기 — 카페 주문 비유

C 프로그램은 카페 주문서와 비슷합니다.

카페C 코드
메뉴판`<stdio.h>` 헤더(쓸 수 있는 함수 목록)
주문 시작`int main(void) {`
주문 항목`printf(...);`
결제 완료`return 0;`

주문이 없으면(=`main`이 비면) 카페는 그냥 문 닫고 종료합니다.

자주 하는 실수

  1. **세미콜론 누락**: `printf("hi")` 끝에 `;`이 없으면 컴파일 오류.
  2. **`#include` 빠뜨림**: `printf` 사용 시 `<stdio.h>` 누락 → "implicit declaration" 경고.
  3. **`Main` 대문자**: C는 대소문자 구분. 진입점은 반드시 `main`.
  4. **`printf("hi")`의 따옴표**: 큰따옴표(`"`)와 작은따옴표(`'`)는 다릅니다 (`'h'`는 한 문자).
  5. **한글이 깨짐**: 터미널이 UTF-8이 아니면 깨집니다. Linux/macOS는 보통 OK.

정리

  • C 소스는 `#include`, `main`, 본문, `return`의 4부분으로 구성된다.
  • `gcc -o 이름 파일.c`로 컴파일, `./이름`으로 실행.
  • `printf`는 자동 줄바꿈을 하지 않으므로 `\n`을 직접 써야 한다.
  • 주석은 컴파일에 영향이 없으니 자유롭게 활용한다.
  • 한 사이클(작성→빌드→실행)이 막힘없이 돌아가도록 환경을 다듬는 것이 첫 목표.

직접 해 보기

bash
cd src

gcc -std=c11 -Wall -o ex01 ex01_hello.c && ./ex01
gcc -std=c11 -Wall -o ex02 ex02_multiline.c && ./ex02
gcc -std=c11 -Wall -o ex03 ex03_comments.c && ./ex03

응용:

  1. `ex01_hello.c`에서 `\n`을 지워 보고 출력이 어떻게 달라지는지 확인.
  2. `printf`를 한 번만 호출해 3줄을 출력해 보세요. (힌트: `"줄1\n줄2\n줄3\n"`)

💻 예제 (examples)

실제로 컴파일·실행해 결과를 확인할 수 있는 예제입니다.

ex01_hello.c가장 단순한 출력
CODE
#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}
▶ 실행 결과
Hello, World!
ex02_multiline.c여러 줄 출력과 탭
CODE
#include <stdio.h>

int main(void) {
    printf("첫 번째 줄\n");
    printf("두 번째 줄\n");
    printf("탭\t으로 구분\n");
    printf("한 번에\n여러 줄\n출력하기\n");
    return 0;
}
▶ 실행 결과
첫 번째 줄
두 번째 줄
탭	으로 구분
한 번에
여러 줄
출력하기
ex03_comments.c주석은 실행되지 않는다
CODE
#include <stdio.h>

/*
 * 이 프로그램은 주석 사용 예시입니다.
 * 컴파일러는 주석을 무시합니다.
 */
int main(void) {
    // 한 줄 주석: 메시지 출력
    printf("주석은 컴파일에 영향을 주지 않습니다.\n");

    /* printf("이 줄은 출력되지 않습니다."); */

    return 0;
}
▶ 실행 결과
주석은 컴파일에 영향을 주지 않습니다.

📝 과제 (exercises)

직접 풀어보고, 막힐 때 정답을 펼쳐 비교해보세요.

과제 1

문제 1 (hw01.c)

목표: 다음과 같은 자기소개를 정확히 출력하는 프로그램을 작성하세요.

요구사항
  • 파일명: hw01.c
입출력 예시
이름: 홍길동
나이: 20
취미: 코딩
정답 코드 펼치기 / 접기
SOLUTION
#include <stdio.h>

int main(void) {
    printf("이름: 홍길동\n");
    printf("나이: 20\n");
    printf("취미: 코딩\n");
    return 0;
}
▶ 실행 결과
이름: 홍길동
나이: 20
취미: 코딩
과제 2

문제 2 (hw02.c)

목표: 다음 ASCII 아트를 출력하세요. 백슬래시(`\`)는 `\\`로 이스케이프해야 합니다.

요구사항
  • 파일명: hw02.c
입출력 예시
  /\_/\
 ( o.o )
  > ^ <
정답 코드 펼치기 / 접기
SOLUTION
#include <stdio.h>

int main(void) {
    printf("  /\\_/\\\n");
    printf(" ( o.o )\n");
    printf("  > ^ <\n");
    return 0;
}
▶ 실행 결과
  /\_/\
 ( o.o )
  > ^ <
예제 코드 / 강의 자료

전체 강의 자료와 예제 코드는 GitHub에서 자유롭게 받아볼 수 있습니다.

GitHub에서 보기 ↗