시작하기 전에
언어를 배우기 전, 가장 중요한 질문이 하나 있습니다. “나는 왜 이것을 배우는가?” 작은 목표라도 좋습니다. 명확한 이유가 있을 때, 배움은 더 즐거워집니다.
C언어, 왜 배워야 할까?
C언어의 활용 분야
C언어는 1972년에 개발된 오래된 언어지만, 여전히 현대 소프트웨어 개발의 핵심으로 자리잡고 있습니다.
C언어가 사용되는 곳
- 운영체제: Windows, Linux, macOS의 핵심 부분은 C로 작성되었습니다
- 임베디드 시스템: 자동차, 가전제품, IoT 기기의 펌웨어
- 게임 엔진: Unreal Engine, Unity 등의 핵심 엔진
- 데이터베이스: MySQL, PostgreSQL 등
- 컴파일러: Python, Java 등의 인터프리터와 컴파일러
- 시스템 프로그래밍: 드라이버, 네트워크 프로토콜 스택
C언어가 중요한 이유
1. 하드웨어에 가까운 언어
C언어는 고급 언어이면서도 하드웨어를 직접 제어할 수 있는 능력을 제공합니다. 메모리를 직접 관리하고, 포인터를 통해 메모리 주소에 접근할 수 있어 시스템의 동작 원리를 깊이 이해할 수 있습니다.
2. 빠른 실행 속도
C언어로 작성된 프로그램은 기계어에 가깝게 컴파일되어 매우 빠른 실행 속도를 자랑합니다. 성능이 중요한 분야에서는 여전히 C가 최선의 선택입니다.
3. 다른 언어의 기초
C언어를 배우면 C++, Java, C#, JavaScript 등 수많은 언어를 쉽게 배울 수 있습니다. 많은 현대 언어들이 C의 문법과 개념을 기반으로 설계되었기 때문입니다.
4. 컴퓨터 과학의 기본 개념 학습
메모리 관리, 포인터, 자료구조, 알고리즘 등 컴퓨터 과학의 핵심 개념을 C를 통해 배울 수 있습니다. 이는 프로그래머로서 성장하는 데 필수적인 지식입니다.
C언어는 컴퓨터의 동작 원리를 이해하고, 효율적인 프로그램을 작성하는 방법을 배우는 최고의 언어입니다.
개발 환경 설정
C 언어 프로그래밍을 시작하기 위해서는 코드를 작성할 에디터와 코드를 실행 가능한 프로그램으로 만들어주는 컴파일러가 필요합니다.
1. Visual Studio Code 설치
Visual Studio Code(VSCode)는 Microsoft에서 개발한 무료 코드 에디터로, 가볍고 강력한 기능을 제공합니다.
다운로드 및 설치
- Visual Studio Code 공식 웹사이트에 접속합니다.
- 운영체제에 맞는 버전을 다운로드합니다.
- Windows:
.exe파일 다운로드 - macOS:
.dmg파일 다운로드 - Linux:
.deb또는.rpm파일 다운로드
- Windows:
- 다운로드한 파일을 실행하여 설치를 진행합니다.
- 설치 과정에서 “PATH에 추가” 옵션을 체크하면 터미널에서
code명령어로 VSCode를 실행할 수 있습니다.
2. C 컴파일러 설치
C 언어로 작성한 코드를 실행하려면 컴파일러가 필요합니다. 운영체제별로 설치 방법이 다릅니다.
Windows - MinGW 설치
MinGW(Minimalist GNU for Windows)는 Windows에서 GCC 컴파일러를 사용할 수 있게 해주는 도구입니다.
- MinGW-w64 다운로드 페이지에 접속합니다.
- 최신 버전을 다운로드하고 설치합니다.
- 설치 시 옵션 선택:
- Architecture:
x86_64(64비트) 선택 - Threads:
posix선택 - Exception:
seh선택
- Architecture:
- 설치가 완료되면 환경 변수에 MinGW의
bin폴더 경로를 추가합니다.C:\mingw-w64\mingw64\bin - 명령 프롬프트에서 다음 명령어로 설치를 확인합니다:
gcc --version
macOS - Xcode Command Line Tools
macOS에는 기본적으로 gcc가 포함된 Xcode Command Line Tools를 설치할 수 있습니다.
- 터미널을 엽니다.
- 다음 명령어를 입력합니다:
xcode-select --install - 설치 창이 나타나면 “설치”를 클릭합니다.
- 설치 완료 후 다음 명령어로 확인합니다:
gcc --version
3. VSCode Extension 설치
VSCode에서 C 언어 개발을 편리하게 하기 위해 확장 프로그램을 설치합니다.
C/C++ Extension 설치
- VSCode를 실행합니다.
- 왼쪽 사이드바에서 확장(Extensions) 아이콘을 클릭하거나
Ctrl+Shift+X(macOS:Cmd+Shift+X)를 누릅니다. - 검색창에 “C/C++”를 입력합니다.
- Microsoft에서 제공하는 C/C++ 확장을 찾아 “설치(Install)” 버튼을 클릭합니다.
- C/C++ (Microsoft): IntelliSense, 디버깅, 코드 탐색 기능
- Code Runner: 코드를 빠르게 실행할 수 있는 확장
- C/C++ Themes: C 언어 문법 하이라이팅 개선
4. Hello World 프로그램 작성
이제 모든 준비가 끝났습니다! 첫 번째 C 프로그램을 작성해봅시다.
프로젝트 폴더 생성
- 작업할 폴더를 생성합니다 (예:
c-basic). - VSCode에서
파일 > 폴더 열기를 통해 해당 폴더를 엽니다.
hello.c 파일 생성
- VSCode에서 새 파일을 생성합니다 (
Ctrl+N또는Cmd+N). - 다음 코드를 입력합니다:
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
- 파일을
hello.c로 저장합니다 (Ctrl+S또는Cmd+S).
코드 설명
#include <stdio.h>: 표준 입출력 함수를 사용하기 위한 헤더 파일int main(): 프로그램의 시작점인 main 함수printf("Hello World!\n"): 화면에 “Hello World!” 출력\n: 줄바꿈 문자return 0: 프로그램 정상 종료
컴파일 및 실행
터미널 열기:
- VSCode에서
Ctrl+`(백틱) 또는터미널 > 새 터미널
컴파일:
gcc hello.c -o hello
실행:
Windows:
hello.exe
macOS:
./hello
출력 결과:
Hello World!
C 프로그램의 구조 이해하기
방금 작성한 Hello World 프로그램을 다시 살펴보면서 C 프로그램의 기본 구조를 이해해봅시다.
main() 함수의 역할
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
모든 C 프로그램은 반드시 main() 함수를 포함해야 합니다. 프로그램이 실행되면 컴퓨터는 가장 먼저 main() 함수를 찾아 그 안의 코드를 실행합니다.
main() 함수가 없는 C 프로그램은 실행될 수 없습니다. 마치 건물의 정문과 같은 역할을 합니다.
간단한 실험
다음 코드를 작성하고 실행해보세요:
int main() {
return 0;
}
이 프로그램은 아무것도 출력하지 않지만, 정상적으로 컴파일되고 실행됩니다. main() 함수만 있으면 최소한의 C 프로그램이 완성되는 것입니다.
헤더 파일이란?
#include <stdio.h>는 무엇일까요?
헤더 파일은 프로그램에서 사용할 함수들이 어떻게 동작하는지 미리 정의해놓은 파일입니다. 마치 도구 상자에서 필요한 도구를 꺼내 쓰는 것과 같습니다.
stdio.h의 역할
stdio.h는 Standard Input Output의 약자입니다printf(),scanf()같은 입출력 함수들이 정의되어 있습니다- 이 헤더를 포함하지 않으면
printf()함수를 사용할 수 없습니다
헤더 파일 없이 실행하면?
다음 코드를 실행해보세요:
int main() {
printf("Test"); // 오류 발생!
return 0;
}
컴파일러는 printf가 무엇인지 모르기 때문에 오류를 발생시킵니다. 헤더 파일을 포함해야 printf 함수를 사용할 수 있습니다.
C 프로그램의 기본 구조
// 1. 헤더 파일 포함 (전처리기 지시문)
#include <stdio.h>
// 2. main() 함수 정의
int main() {
// 3. 실행할 명령문들
printf("Hello World!\n");
// 4. 프로그램 종료
return 0;
}
- 헤더 파일: 필요한 함수들을 사용하기 위해 포함
- main() 함수: 프로그램의 시작점
- 중괄호 { }: 코드 블록을 묶어주는 역할
- 세미콜론 ;: 각 명령문의 끝을 표시
- return 0: 프로그램이 정상적으로 종료되었음을 의미
주요 개념 정리
함수 (Function)
여러 명령어를 하나로 묶어놓은 것입니다. printf()도 함수이고, main()도 함수입니다.
함수이름() {
실행할 내용
}
전처리기 (Preprocessor)
#include처럼 #으로 시작하는 명령은 컴파일 전에 먼저 처리됩니다. 이를 전처리기 지시문이라고 합니다.
코드 블록 (Code Block)
중괄호 { }로 묶인 영역을 말합니다. 여러 명령문을 하나의 그룹으로 묶을 때 사용합니다.
int main() {
// 이 부분이 코드 블록
printf("첫 번째 줄\n");
printf("두 번째 줄\n");
}
실습: 다양한 헤더 파일
자주 사용되는 헤더 파일들:
#include <stdio.h> // 입출력 함수
#include <stdlib.h> // 메모리 할당, 난수 생성 등
#include <string.h> // 문자열 처리 함수
#include <math.h> // 수학 함수
컴파일 과정 이해하기
C 언어는 컴파일 언어입니다. 작성한 코드(소스 코드)가 바로 실행되는 것이 아니라, 컴파일러를 통해 기계어로 변환되는 과정을 거칩니다.
소스 코드(.c) → [컴파일러] → 실행 파일(.exe 또는 바이너리)
gcc 명령어 옵션:
gcc: GCC 컴파일러 실행hello.c: 컴파일할 소스 파일-o hello: 출력 파일 이름 지정 (-o는 output의 약자)- 옵션을 생략하면
a.out(macOS) 또는a.exe(Windows)로 생성됩니다
문제 해결
gcc를 인식하지 못하는 경우
Windows:
- 환경 변수에 MinGW의 bin 폴더가 제대로 추가되었는지 확인
- 명령 프롬프트를 재시작
macOS:
- Xcode Command Line Tools가 제대로 설치되었는지 확인
xcode-select --install재실행
VSCode에서 IntelliSense가 작동하지 않는 경우
- C/C++ Extension이 제대로 설치되었는지 확인
- VSCode 재시작
c_cpp_properties.json파일 설정 확인