본문으로 바로가기
제품데스크톱 도구TASTECAD도면 확인TASTEFILES파일 관리TASTEFTP파일 전송TASTESSH원격 작업공간TASTEZIP압축과 해제개발 도구TASTECODERust 통합 개발 환경TASTESTUDIO통합 개발·테스트 환경TASTEETL데이터 통합(ETL)서버TASTEREMOTE원격 데스크톱 서버TASTEGEO공간정보 서버TASTEMAIL메일 작업공간시작하기다운로드문서구매모든 제품
마켓플레이스
소식
개발소식오늘의 개발 소식개발 문서프로그래밍 언어RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron알고리즘알고리즘 기초알고리즘 핵심알고리즘 심화실무 알고리즘
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스커뮤니티 안내
협업기술 전수홈페이지 구축데스크톱 앱 구축릴리스·결제 파이프라인판매 파트너문의
서비스원격 데스크톱설치 패키지 커스텀
TASTEDEV
제품

데스크톱 도구

TASTECAD복잡한 도면을 가볍게 열다TASTEFILES필요한 파일만, 가장 빠르게TASTEFTP파일이 오가는 가장 단정한 길TASTESSH서버와 나 사이, 더 단단한 연결TASTEZIP더 빠르게 묶고, 더 안전하게 풀다

개발 도구

TASTECODERust 앱을 편집 · 빌드 · 디버깅 · 테스트까지 한 창에서TASTESTUDIO편집부터 원격 테스트와 승인 기반 AI 수정까지TASTEETL값을 보며 데이터를 옮깁니다

서버

TASTEREMOTE우리 회사 서버로 운영하는 원격 데스크톱TASTEGEOGeoServer 호환 공간정보 서버를 Rust로 다시 세웁니다TASTEMAIL메일의 주도권을 다시 내 손에

시작하기

다운로드모든 제품 최신 판문서제품 사용법구매구독 · 영구 라이선스모든 제품모든 제품 한눈에
모든 제품
마켓플레이스소식
개발

소식

오늘의 개발 소식언어 · 프레임워크 · GitHub · AI 공식 발표개발 문서언어 · 프레임워크 · 알고리즘 안내서

프로그래밍 언어

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

프레임워크

프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular
서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express
앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron

알고리즘

알고리즘 기초복잡도 분석 · 정렬 · 탐색 · 기본 자료구조 · 트리와 힙알고리즘 핵심그래프 탐색 · 최단 경로와 최소 신장 트리 · 동적 계획법 · 탐욕 알고리즘 · 분할 정복 · 백트래킹알고리즘 심화문자열 알고리즘 · 수학과 정수론 · 비트 연산 · 구간 트리 · 유니온 파인드실무 알고리즘코딩 면접 풀이 전략 · LRU 캐시 · 레이트 리미터 · 일관된 해시
개발 문서 전체 보기
커뮤니티
프로젝트빌더와 작업 발견개발 로그결정과 시행착오프롬프트재사용 가능한 지시AI 도구 이슈Claude · Codex · Gemini 문제와 우회법쇼케이스완성된 결과커뮤니티 안내공개하고 함께 만드는 방식
협업
기술 전수Rust·egui 네이티브 앱 만들기홈페이지 구축10개 언어, 계정, 문서·다운로드데스크톱 앱 구축Rust·egui, WebView 없이릴리스·결제 파이프라인서명 · MSI·deb·rpm·AppImage · 해시판매 파트너소개하고 결제액의 30% 받기문의구축 · 제휴 · 투자 문의
서비스
원격 데스크톱브라우저로 내 컴퓨터에 접속설치 패키지 커스텀필요한 기능만, 설정은 미리
구매
KO
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
로그인
로그인
TASTEDEV

작은 도구부터, 더 좋은 개발까지.

support@tastedev.netTASTEDEV 후원하기
제품제품군구매문서다운로드마켓플레이스고객 지원
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스
정책개인정보처리방침이용약관구독 약관환불 정책커뮤니티 운영 정책
계정로그인가입하기
방문자
오늘
012345678901234567890123456789012345678901234567890123456789
어제
012345678901234567890123456789012345678901234567890123456789
누적 조회
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
상호
지엑스소프트
대표자
최영구
사업자등록번호
853-44-00368
주소
인천광역시 미추홀구 경인로 351 9층 V24
전화
+82-10-4404-1523
이메일
whitecalvin@tastedev.net
개인정보 보호책임자
최영구

© 2026 TASTEDEV제품 정보는 현재 검증된 개발 소스를 기준으로 합니다.출시·고도화 중

C 문서
C
시작하기기본 문법타입과 데이터모듈과 라이브러리오류 처리와 테스트핵심 개념: 포인터와 메모리
토론

C 안내서 · 1/6

시작하기

C는 운영체제, 임베디드 펌웨어, 데이터베이스, 다른 언어의 런타임처럼 하드웨어 가까이에서 동작하는 소프트웨어를 만드는 데 쓰이는 언어입니다. C 프로그램은 소스 파일을 컴파일러가 기계어로 번역해 실행 파일을 만드는 방식으로 동작합니다. 이 장에서는 컴파일러를 설치하고, 첫 프로그램을 빌드해 실행하고, 경고를 켜는 방법과 빌드가 내부에서 어떤 단계를 거치는지 살펴봅니다.

컴파일러 설치

C 컴파일러는 대표적으로 GCC, Clang, MSVC 세 가지가 있습니다. 어느 것을 써도 표준 C 코드는 똑같이 빌드되므로 운영체제에서 가장 쉽게 설치되는 것을 고르면 됩니다.

운영체제권장 컴파일러설치 방법
Ubuntu · DebianGCCsudo apt install build-essential
FedoraGCCsudo dnf install gcc make
macOSClangxcode-select --install (Command Line Tools)
WindowsMSVCVisual Studio 또는 Build Tools의 "C++를 사용한 데스크톱 개발" 워크로드
WindowsGCCMSYS2에서 UCRT64 환경의 GCC 패키지 설치

설치가 끝나면 터미널에서 버전을 확인해 컴파일러가 경로에 잡혔는지 봅니다.

gcc --version
clang --version
# Windows MSVC는 "Developer Command Prompt"에서
cl

MSVC의 cl 명령은 일반 명령 프롬프트가 아니라 Visual Studio가 설치하는 Developer Command Prompt(또는 Developer PowerShell)에서 실행해야 환경 변수가 맞게 잡힙니다.

첫 프로그램

hello.c 파일을 만들고 다음 코드를 넣습니다.

#include <stdio.h>

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

#include <stdio.h>는 표준 입출력 함수 선언을 가져옵니다. 프로그램은 항상 main 함수에서 시작하며, main이 돌려주는 값은 운영체제에 전달되는 종료 상태입니다. 0은 성공을 뜻합니다.

이제 컴파일하고 실행합니다.

# GCC 또는 Clang
gcc -std=c17 -Wall -Wextra -g hello.c -o hello
./hello
echo $?    # 종료 상태(0)

# MSVC (Developer Command Prompt)
cl /std:c17 /W4 hello.c
hello.exe

-o hello는 출력 파일 이름입니다. 생략하면 GCC와 Clang은 a.out을 만듭니다. -std=c17은 사용할 C 표준을 정하고, -g는 디버거가 쓰는 디버그 정보를 넣습니다. 배포용으로 빌드할 때는 -O2 같은 최적화 옵션을 더합니다.

경고를 켜 두는 습관

C 컴파일러는 기본 설정에서 문제가 있는 코드도 조용히 통과시키는 경우가 많습니다. 그래서 처음부터 경고를 넉넉하게 켜 두는 것이 좋습니다.

  • -Wall: 흔한 실수를 잡는 경고 묶음입니다. 이름과 달리 모든 경고를 켜지는 않습니다.
  • -Wextra: -Wall이 다루지 않는 경고를 더합니다. 쓰지 않는 매개변수 같은 것을 알려 줍니다.
  • -Wpedantic: 표준에 없는 컴파일러 확장을 쓰면 경고합니다.
  • -Werror: 경고를 오류로 바꿉니다. CI에서 경고가 쌓이지 않게 할 때 씁니다.
  • MSVC에서는 /W4가 비슷한 역할을 하고 /WX가 경고를 오류로 바꿉니다.

다음 코드는 문법상 컴파일되지만 실수가 두 개 있습니다.

#include <stdio.h>

int area(int width, int height) {
    return width * width;   /* height를 쓰지 않음 */
}

int main(void) {
    printf("%d\n", 3.5);    /* %d에 double을 넘김 */
    return area(2, 3) == 4 ? 0 : 1;
}

-Wall -Wextra로 빌드하면 printf 형식 지정자와 인수 타입이 맞지 않는다는 경고와 height 매개변수를 쓰지 않는다는 경고가 나옵니다. 경고 없이 빌드하면 이런 실수는 실행 중에 엉뚱한 값으로만 드러납니다.

빌드의 네 단계

gcc hello.c -o hello 한 줄은 실제로 네 단계를 차례로 실행합니다.

  1. 전처리: #include로 헤더 내용을 붙여 넣고, #define 매크로를 펼치고, #if 조건에 따라 코드를 고릅니다.
  2. 컴파일: 전처리된 C 코드를 어셈블리로 번역합니다. 문법 오류와 대부분의 경고가 이 단계에서 나옵니다.
  3. 어셈블: 어셈블리를 기계어가 담긴 오브젝트 파일(.o, Windows는 .obj)로 바꿉니다.
  4. 링크: 여러 오브젝트 파일과 라이브러리를 묶어 실행 파일을 만듭니다. "undefined reference" 오류는 이 단계에서 나옵니다.

각 단계를 따로 실행해 결과물을 직접 볼 수 있습니다.

gcc -E hello.c -o hello.i   # 전처리 결과(긴 C 코드)
gcc -S hello.i -o hello.s   # 어셈블리
gcc -c hello.s -o hello.o   # 오브젝트 파일
gcc hello.o -o hello        # 링크

실무에서는 보통 -c로 소스 파일마다 오브젝트 파일을 만들고 마지막에 한꺼번에 링크합니다. 이렇게 하면 바뀐 파일만 다시 컴파일하면 되므로 빌드가 빨라집니다. 이 방식은 4장에서 Make, CMake와 함께 다시 다룹니다.

정리

  • GCC, Clang, MSVC 중 운영체제에 맞는 컴파일러를 설치하고 --version으로 확인합니다.
  • 프로그램은 main에서 시작하고, 반환값 0은 성공을 뜻합니다.
  • 처음부터 -std=c17 -Wall -Wextra(MSVC는 /W4)로 빌드해 실수를 일찍 잡습니다.
  • 빌드는 전처리, 컴파일, 어셈블, 링크 네 단계로 이루어지며, 오류 메시지가 어느 단계에서 나왔는지 알면 원인을 찾기 쉽습니다.
이 장에 대해 질문이 있나요?
다음 장기본 문법

댓글 0개

인기 댓글순최신순

로그인 · 로그인하면 댓글을 남길 수 있습니다.