OPEN HYPER STEP
← 목록으로 (화이트햇 보안)
SECURITY · 85 / 96
security
CHAPTER 85 / 96
읽기 약 2
FUNCTION

C 최소 문법: printf부터


핵심 개념

⚠️ C 메모리 취약점 학습용 최소 문법. printf·변수·타입·gcc 컴파일 — Python/JS 경험자가 빠르게 시작.

본문

첫 C 프로그램

C📋 코드 (7줄)
// hello.c
#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}
BASH📋 코드 (11줄)
# 컴파일 + 실행
gcc -Wall -O0 -g -o hello hello.c
./hello
# Hello, World!


# 자주 쓰는 옵션
# -Wall  : 모든 경고
# -O0    : 최적화 없음 (디버그용)
# -g     : 디버그 심볼 포함
# -fsanitize=address  : ASan (메모리 오류 탐지)

변수와 타입

C📋 코드 (23줄)
#include <stdio.h>

int main(void) {
    // 정수 타입
    int   age = 30;          // 보통 4바이트 (-2^31 ~ 2^31-1)
    long  big = 100000000L;  // 보통 8바이트
    short small = 32000;     // 보통 2바이트

    // 부동소수점
    float  pi = 3.14f;       // 4바이트
    double precise = 3.14159265358979;  // 8바이트

    // 문자
    char  c = 'A';           // 1바이트 (ASCII 65)

    // 부호 없음
    unsigned int positive = 4294967295;  // 0 ~ 2^32-1

    printf("age=%d, pi=%f, c=%c\n", age, pi, c);
    printf("size: int=%zu, long=%zu, char=%zu\n",
           sizeof(int), sizeof(long), sizeof(char));
    return 0;
}

조건문과 반복문

C📋 코드 (28줄)
#include <stdio.h>

int main(void) {
    // if-else
    int score = 85;
    if (score >= 90) {
        printf("A\n");
    } else if (score >= 80) {
        printf("B\n");
    } else {
        printf("F\n");
    }

    // for
    for (int i = 0; i < 5; i++) {
        printf("%d ", i);
    }
    printf("\n");

    // while
    int n = 10;
    while (n > 0) {
        printf("%d ", n--);
    }
    printf("\n");

    return 0;
}

printf 포맷 — 메모리 취약점의 시작

C📋 코드 (11줄)
// printf 포맷 지정자
%d   // int (10진수)
%u   // unsigned int
%x   // 16진수
%c   // 문자
%s   // 문자열 (null 종료)
%p   // 포인터 (주소)
%zu  // size_t


// ⚠️ 다음 챕터에서 이 포맷이 어떻게 취약점이 되는지

C와 Python/JS 차이

📋 코드 (8줄)
| 측면 | C | Python/JS |
|---|---|---|
| 컴파일 | 명시적 (gcc) | 인터프리터 |
| 메모리 | 수동 (malloc/free) | 자동 (GC) |
| 타입 | 정적·강타입 | 동적 |
| 포인터 | 직접 사용 | 추상화 |
| 안전성 | 프로그래머 책임 | 런타임 보호 |
| 속도 | 매우 빠름 | 느림 (10~100배) |

다음 챕터

CH.2 "C 최소 문법: 배열과 문자열" — 버퍼의 시작.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

Python/JS 경험자인 내가 C를 30일에
익히려면 어떤 챕터·문제를 풀어야 할지
학습 플랜을 만들어줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

한국 임베디드/시스템 개발자의
C 학습 경로 5가지를 비교해줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드(다른 언어)를 C로 변환했을 때
주의할 메모리 안전 이슈를
자동 분석해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 IT 시장에서 C 개발자
수요 vs 공급, 연봉 트렌드를 솔직히 알려줘.

⭐ 이것만 기억하세요
C 최소 문법: printf부터 이 3가지만 확실히 잡으세요
1.C는 컴파일·정적 타입·수동 메모리 — Python/JS와 다른 패러다임이지만 메모리 동작 이해의 시작
2.gcc -Wall -fsanitize=address — 학습 시 모든 경고 + 메모리 오류 자동 탐지
3.다음 챕터 CH.2에서 배열과 문자열 — 버퍼 개념과 메모리 취약점의 시작


공유하기
진행도 85 / 96