코드를 쓰는 일과 실행하는 일은 다르다
C언어를 처음 만날 때 많은 사람이 가장 먼저 헷갈리는 지점이 있습니다. 코드를 썼는데 왜 바로 실행되지 않을까요? Python에서는 python hello.py라고 입력하면 곧장 실행되고, JavaScript도 node hello.js로 바로 결과를 볼 수 있습니다. 그런데 C는 보통 이런 과정을 거칩니다.
gcc hello.c -o hello
./hello첫 줄은 프로그램을 실행하는 명령이 아닙니다. 사람이 읽을 수 있는 C 소스 코드를 컴퓨터가 실행할 수 있는 파일로 바꾸는 명령입니다. 두 번째 줄이 비로소 만들어진 실행 파일을 실행하는 명령입니다.
이 차이가 C언어의 첫 번째 문입니다. C는 단순히 문법을 외우는 언어가 아니라, 내가 쓴 코드가 어떤 과정을 거쳐 CPU가 실행할 수 있는 명령이 되는지 보여 주는 언어입니다. 그래서 개발 환경을 준비한다는 말도 단순히 "프로그램 하나 설치하기"가 아닙니다. 코드를 작성하는 편집기, 코드를 번역하는 컴파일러, 명령을 입력하고 결과를 확인하는 터미널을 함께 준비하는 일입니다.
이번 장의 목표는 분명합니다. 여러분의 컴퓨터에서 C 파일을 만들고, 직접 컴파일하고, 실행 파일이 생기는 순간을 눈으로 확인하는 것입니다.

C 개발 환경을 이루는 세 가지 도구
C언어 개발 환경은 보통 세 가지로 이루어집니다.
| 도구 | 역할 | 대표 예 |
|---|---|---|
| 편집기 또는 IDE | 코드를 작성한다 | VS Code, Visual Studio, Xcode, Vim |
| 컴파일러 | C 코드를 실행 파일로 바꾼다 | GCC, Clang, MSVC |
| 터미널 | 명령을 입력하고 결과를 확인한다 | PowerShell, 명령 프롬프트, Terminal, Bash |
여기서 가장 중요한 사실은 VS Code는 컴파일러가 아니라 편집기라는 점입니다. VS Code에 C/C++ 확장을 설치하면 문법 색상, 자동 완성, 오류 표시 같은 기능을 얻을 수 있지만, 그 확장 자체가 C 코드를 실행 파일로 바꿔 주지는 않습니다. Microsoft의 VS Code 문서도 C/C++ 확장은 언어 지원을 제공하지만 컴파일러와 디버거는 별도로 설치해야 한다고 설명합니다.1
비유하자면 VS Code는 글을 쓰는 노트이고, 컴파일러는 그 글을 실제 제품으로 만들어 내는 공장입니다. 노트가 아무리 좋아도 공장이 없으면 물건이 나오지 않습니다. 반대로 공장이 있어도 원고를 편하게 쓸 도구가 없으면 작업이 불편합니다. 둘이 함께 있어야 개발 환경이 됩니다.
컴파일러는 무엇을 할까?
컴파일러는 C 소스 파일을 CPU가 실행할 수 있는 형태로 바꾸는 프로그램입니다. C 소스 파일은 보통 .c 확장자를 가집니다. 예를 들어 hello.c는 사람이 읽는 텍스트 파일입니다.
하지만 CPU는 printf("Hello") 같은 문장을 직접 이해하지 못합니다. CPU가 이해하는 것은 기계어, 즉 아주 낮은 수준의 명령입니다. 컴파일러는 이 간격을 메워 줍니다.
겉으로는 다음 한 줄이면 끝나는 것처럼 보입니다.
gcc hello.c -o hello하지만 내부에서는 여러 단계가 이어집니다.
hello.c
↓ 전처리
전처리된 소스
↓ 컴파일
어셈블리 코드
↓ 어셈블
오브젝트 파일
↓ 링크
실행 파일각 단계를 짧게 풀어 보면 이렇습니다.
| 단계 | 하는 일 | 자주 만나는 문제 |
|---|---|---|
| 전처리 | #include, #define 같은 지시문을 처리한다 | 헤더 파일을 찾지 못함 |
| 컴파일 | C 문법을 검사하고 어셈블리 코드로 바꾼다 | 세미콜론 누락, 타입 오류 |
| 어셈블 | 어셈블리 코드를 기계어가 담긴 오브젝트 파일로 바꾼다 | 낮은 수준의 변환 오류 |
| 링크 | 여러 오브젝트 파일과 라이브러리를 묶어 실행 파일을 만든다 | 함수 정의를 찾지 못함 |
초보자에게 이 과정이 당장 전부 필요하지는 않습니다. 하지만 아주 중요한 감각 하나는 가져가야 합니다. 컴파일 에러와 링크 에러는 다른 종류의 문제입니다.
예를 들어 세미콜론을 빼먹으면 컴파일 단계에서 문제가 납니다. 반면 함수의 선언은 있는데 실제 정의가 없으면 링크 단계에서 문제가 납니다. 나중에 프로그램을 여러 파일로 나누기 시작하면 이 차이가 매우 중요해집니다.
GCC, Clang, MSVC: 세 컴파일러의 성격
C언어 컴파일러에는 여러 종류가 있습니다. 그중 입문자가 가장 자주 만나는 이름은 GCC, Clang, MSVC입니다. 모두 C 코드를 실행 파일로 만들어 주지만, 주로 쓰이는 환경과 생태계가 조금씩 다릅니다.
| 컴파일러 | 주 사용 환경 | 특징 |
|---|---|---|
| GCC | Linux, 임베디드, 크로스플랫폼 개발 | 오래되고 널리 쓰이는 오픈 소스 컴파일러 모음 |
| Clang | macOS, LLVM 생태계, 현대적 도구 체인 | 오류 메시지가 비교적 친절하고 도구 연동이 좋음 |
| MSVC | Windows, Visual Studio | Windows API와 Visual Studio 환경에 강함 |
GCC는 GNU Compiler Collection의 약자로, Linux 세계에서 매우 널리 쓰입니다. 임베디드 개발에서도 자주 만납니다. 작은 보드나 특정 CPU용 프로그램을 만들 때 GCC 계열의 크로스 컴파일러를 사용하는 경우가 많습니다.
Clang은 LLVM 프로젝트와 함께 성장한 컴파일러입니다. macOS에서는 Xcode Command Line Tools를 설치하면 Clang을 자연스럽게 사용하게 됩니다. Clang은 오류 메시지가 비교적 읽기 좋고, 코드 분석 도구와도 잘 연결됩니다.
MSVC는 Microsoft Visual C++ 컴파일러입니다. 이름에 C++이 들어가 있지만 C 코드도 컴파일할 수 있습니다. Windows에서 Visual Studio를 사용해 데스크톱 앱, 게임, Windows API 기반 프로그램을 만들 때 강력합니다.
처음부터 세 컴파일러를 모두 설치할 필요는 없습니다. 입문 단계에서는 운영체제에 맞는 하나를 안정적으로 준비하는 것이 더 중요합니다. Windows에서는 Visual Studio/MSVC 또는 VS Code와 MSYS2 기반 GCC 조합을 고를 수 있고, macOS에서는 Clang, Linux에서는 GCC가 자연스러운 선택입니다.
Windows에서 개발 환경 준비하기
Windows는 기본 상태에서 gcc가 설치되어 있지 않은 경우가 대부분입니다. 그래서 Windows에서 C를 시작할 때는 먼저 어떤 길로 갈지 정해야 합니다.
| 선택지 | 추천 상황 | 장점 |
|---|---|---|
| Visual Studio + MSVC | Windows 프로그램 개발에 관심이 있다 | 설치와 디버깅 환경이 통합되어 있다 |
| VS Code + MSYS2/MinGW-w64 GCC | 책 예제를 터미널 중심으로 따라가고 싶다 | Linux/macOS와 비슷한 명령 흐름을 익히기 좋다 |
| WSL + GCC | Linux 환경을 Windows 안에서 쓰고 싶다 | 실제 Linux와 가까운 개발 환경을 얻는다 |
이 책에서는 운영체제별 차이를 줄이기 위해 터미널에서 직접 컴파일하는 흐름을 자주 사용합니다. 따라서 Windows 사용자라면 VS Code + MSYS2 또는 MinGW-w64 기반 GCC 조합이 연습하기 좋습니다. Windows에는 GCC가 기본 설치되어 있지 않기 때문에 MinGW-w64, MSYS2, Chocolatey, WSL 같은 방법으로 GCC 환경을 따로 준비해야 합니다.2
MSYS2로 GCC 설치하기
MSYS2는 Windows에서 GCC와 여러 개발 도구를 비교적 깔끔하게 설치하고 관리할 수 있게 해 주는 환경입니다. VS Code 공식 문서에서도 Windows에서 MinGW-w64 도구 체인을 준비하는 방법으로 MSYS2를 안내합니다.1
MSYS2를 설치한 뒤 MSYS2 터미널에서 다음 명령을 실행합니다.
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain설치 중 여러 패키지를 선택하라는 메시지가 나오면 기본값으로 진행해도 괜찮습니다. 설치가 끝났다면 Windows가 gcc 명령을 찾을 수 있도록 bin 폴더를 PATH에 추가해야 합니다.
기본 경로로 설치했다면 보통 다음 경로를 추가합니다.
C:msys64ucrt64binWindows에서 PATH를 설정하는 흐름은 다음과 같습니다.
Windows 검색창에서 "환경 변수"를 검색합니다.
"시스템 환경 변수 편집" 또는 "계정의 환경 변수 편집"을 엽니다.
Path항목을 선택하고 편집을 누릅니다.새 항목으로
C:msys64ucrt64bin을 추가합니다.확인을 누른 뒤 열려 있던 터미널과 VS Code를 모두 다시 시작합니다.
PATH는 운영체제가 실행 파일을 찾을 때 뒤지는 경로 목록입니다. gcc라고 입력했을 때 Windows가 C:msys64ucrt64bingcc.exe를 찾을 수 있어야 합니다. PATH를 등록하지 않으면 터미널은 보통 이런 식으로 불평합니다.
gcc is not recognized as an internal or external command또는 PowerShell에서는 다음과 비슷한 메시지가 나옵니다.
gcc : 'gcc' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다.이 메시지는 C 코드가 틀렸다는 뜻이 아닙니다. 아직 터미널이 컴파일러를 찾지 못한다는 뜻입니다.
새 명령 프롬프트나 PowerShell을 열고 다음 명령을 입력해 봅니다.
gcc --version버전 정보가 출력되면 GCC 설치와 PATH 설정이 된 것입니다.
gcc.exe (Rev...) ...
Copyright ...정확한 버전 숫자는 설치 시점에 따라 달라도 괜찮습니다. 중요한 것은 gcc --version 명령이 동작한다는 사실입니다.
Visual Studio와 MSVC를 선택한다면
Windows에서 Visual Studio를 사용하는 방법도 좋은 선택입니다. Visual Studio Installer에서 C++를 사용한 데스크톱 개발 워크로드를 선택하면 MSVC 컴파일러, Windows SDK, 디버거 등이 함께 설치됩니다. 처음에는 버튼이 많아 복잡해 보일 수 있지만, Windows 앱 개발이나 게임 개발 쪽으로 갈 생각이라면 매우 강력한 환경입니다.
다만 이 책의 예제는 특정 IDE 버튼에 의존하지 않고, 가능한 한 다음처럼 명령어 중심으로 설명합니다.
gcc hello.c -o helloVisual Studio를 쓰더라도 "소스 파일이 컴파일되어 실행 파일이 된다"는 흐름은 같습니다. 도구의 화면이 다를 뿐, 컴퓨터 안에서 벌어지는 일은 크게 다르지 않습니다.
macOS에서 개발 환경 준비하기
macOS에서는 Clang을 사용하는 것이 가장 자연스럽습니다. 터미널 앱을 열고 먼저 다음 명령을 입력해 봅니다.
clang --version버전 정보가 나오면 이미 준비된 상태입니다. 만약 설치되어 있지 않다면 다음 명령을 실행합니다.
xcode-select --install그러면 Xcode Command Line Tools 설치 창이 뜹니다. 이 도구에는 Clang, 기본 헤더 파일, 링커 등 C 개발에 필요한 명령줄 도구가 포함됩니다.
설치 후 다시 확인합니다.
clang --versionmacOS에서는 gcc --version을 입력했는데도 실제로는 Apple Clang 정보가 나오는 경우가 있습니다. 이것은 호환성을 위해 gcc 명령이 Clang으로 연결되어 있기 때문입니다. 처음 공부할 때는 너무 깊이 신경 쓰지 않아도 됩니다. 중요한 것은 clang hello.c -o hello 또는 gcc hello.c -o hello 명령으로 C 파일을 컴파일할 수 있느냐입니다.
Linux에서 개발 환경 준비하기
Linux에서는 GCC가 이미 설치되어 있는 경우가 많습니다. 먼저 터미널을 열고 확인합니다.
gcc --version설치되어 있지 않다면 배포판에 맞는 패키지 관리자를 사용합니다. Ubuntu나 Debian 계열에서는 다음 명령을 많이 씁니다.
sudo apt update
sudo apt install build-essentialbuild-essential에는 GCC, 표준 라이브러리 헤더, make 같은 기본 개발 도구가 함께 들어 있습니다. Fedora 계열이라면 다음과 같이 설치할 수 있습니다.
sudo dnf install gccClang을 쓰고 싶다면 Ubuntu/Debian 계열에서는 다음 명령을 사용할 수 있습니다.
sudo apt install clang설치가 끝나면 다시 확인합니다.
gcc --version
clang --version둘 중 하나만 있어도 이 책의 대부분 예제를 따라갈 수 있습니다.
VS Code 준비하기
컴파일러가 준비되었다면 이제 코드를 편하게 작성할 편집기를 준비합니다. 이 책에서는 VS Code를 기준으로 설명하겠습니다. VS Code는 Windows, macOS, Linux에서 모두 사용할 수 있고, 터미널과 편집기를 한 화면에서 다루기 좋습니다.
VS Code를 설치할 때 가능하다면 PATH에 추가 옵션을 켜 둡니다. 그러면 터미널에서 다음 명령으로 현재 폴더를 VS Code로 열 수 있습니다.
code .여기서 점 .은 "현재 폴더"를 뜻합니다. 이 명령은 생각보다 자주 씁니다. 예를 들어 c-study라는 폴더로 이동한 뒤 code .을 입력하면, 그 폴더를 작업 공간으로 하여 VS Code가 열립니다.
VS Code를 열었다면 확장 프로그램 탭에서 C/C++ by Microsoft를 설치합니다. 이 확장은 C/C++ 코드에 대해 문법 색상, 자동 완성, IntelliSense, 오류 표시, 디버깅 지원 등을 제공합니다.1
하지만 다시 강조하겠습니다. 이 확장은 컴파일러가 아닙니다. gcc --version, clang --version, 또는 MSVC의 cl 명령 확인이 따로 되어 있어야 합니다.
VS Code 안에서 터미널을 열려면 메뉴에서 터미널을 선택하거나 다음 단축키를 사용합니다.
Ctrl + `macOS에서도 같은 방식으로 통합 터미널을 열 수 있습니다. 터미널을 열었으면 먼저 컴파일러가 보이는지 확인합니다.
gcc --version또는 macOS라면 다음을 입력합니다.
clang --versionVS Code 안의 터미널에서 버전 정보가 잘 나오면 준비가 거의 끝났습니다. 만약 일반 터미널에서는 되는데 VS Code 터미널에서는 안 된다면 VS Code를 완전히 종료했다가 다시 열어 보세요. PATH 변경 사항은 이미 열려 있던 프로그램에 바로 반영되지 않는 경우가 많습니다.
첫 작업 폴더 만들기
이제 C 코드를 저장할 폴더를 하나 만들겠습니다. 폴더 이름은 자유롭게 정해도 되지만, 경로에 한글이나 공백이 너무 많이 들어가면 초반에 불필요한 문제를 만날 수 있습니다. 처음에는 단순하게 시작하는 편이 좋습니다.
Windows PowerShell에서는 다음처럼 입력할 수 있습니다.
mkdir C:c-study
cd C:c-study
code .macOS나 Linux에서는 홈 폴더 아래에 만들면 편합니다.
mkdir ~/c-study
cd ~/c-study
code .VS Code가 열리면 새 파일을 만들고 이름을 hello.c로 저장합니다. 확장자가 중요합니다. hello.txt가 아니라 hello.c여야 합니다. 파일 이름 뒤의 .c는 "이 파일은 C 소스 파일입니다"라는 표시입니다.
다음 코드를 입력합니다.
#include <stdio.h>
int main(void)
{
printf("Hello, C!n");
return 0;
}아직 이 코드의 모든 문법을 몰라도 괜찮습니다. 다음 장에서 이 프로그램을 한 줄씩 해부할 것입니다. 지금은 "이 파일이 컴파일되어 실행 파일이 되는지"를 확인하는 것이 목표입니다.
직접 컴파일하고 실행하기
VS Code의 터미널에서 hello.c 파일이 있는 폴더에 있는지 확인합니다. 현재 폴더의 파일 목록을 보고 싶다면 다음 명령을 사용합니다.
Windows PowerShell:
dirmacOS/Linux:
ls목록에 hello.c가 보이면 컴파일합니다.
Windows에서 GCC를 사용하는 경우:
gcc hello.c -o hello.exemacOS나 Linux에서 GCC 또는 Clang을 사용하는 경우:
gcc hello.c -o hello또는 macOS에서 Clang을 사용한다면 다음처럼 입력할 수 있습니다.
clang hello.c -o hello여기서 명령의 의미를 나누어 보겠습니다.
gcc C 컴파일러를 실행한다
hello.c 입력 파일이다
-o 출력 파일 이름을 지정하겠다는 뜻이다
hello 만들어질 실행 파일 이름이다-o는 output의 약자라고 생각하면 됩니다. 만약 -o hello를 쓰지 않으면 GCC는 기본적으로 a.out이라는 이름의 실행 파일을 만들기도 합니다. 하지만 파일 이름이 무엇인지 분명히 보이도록 -o를 사용하는 습관을 들이는 편이 좋습니다.
컴파일에 성공하면 아무 메시지도 출력되지 않을 수 있습니다. 초보자에게는 이상하게 느껴질 수 있지만, 터미널 세계에서는 "아무 말이 없으면 성공"인 경우가 많습니다.
이제 실행합니다.
Windows PowerShell:
.hello.exeWindows에서 Git Bash나 MSYS2 터미널을 사용한다면 다음도 가능합니다.
./hello.exemacOS/Linux:
./hello결과가 이렇게 나오면 성공입니다.
Hello, C!방금 여러분은 C 소스 파일을 직접 컴파일해서 실행 파일로 만들고, 그 실행 파일을 실행했습니다. 별것 아닌 한 줄처럼 보이지만, 이 순간부터 C언어는 "그냥 코드"가 아니라 "컴퓨터 위에서 실제로 만들어지는 프로그램"으로 보이기 시작합니다.
소스 파일, 오브젝트 파일, 실행 파일
이번에는 파일이 어떻게 바뀌는지 조금 더 자세히 보겠습니다. C 프로젝트가 커지면 모든 소스 파일을 매번 한 번에 실행 파일로 만들지 않습니다. 먼저 각 소스 파일을 오브젝트 파일로 컴파일하고, 마지막에 그것들을 링크해 실행 파일을 만듭니다.
hello.c를 오브젝트 파일까지만 만들어 보겠습니다.
Windows:
gcc -c hello.c -o hello.omacOS/Linux:
gcc -c hello.c -o hello.o-c 옵션은 "컴파일은 하되 링크는 하지 말라"는 뜻입니다. 이 명령을 실행하면 hello.o 파일이 생깁니다. Windows의 MSVC 환경에서는 비슷한 역할의 파일이 .obj 확장자를 가지기도 합니다.
현재 폴더를 확인해 봅니다.
ls또는 Windows PowerShell:
dir아마 다음과 비슷한 파일들이 보일 것입니다.
hello.c
hello.o
hello.exe 또는 hello각 파일의 정체는 다릅니다.
| 파일 | 정체 | 사람이 읽기 쉬운가? | 바로 실행 가능한가? |
|---|---|---|---|
hello.c | C 소스 파일 | 예 | 아니요 |
hello.o | 오브젝트 파일 | 아니요 | 아니요 |
hello 또는 hello.exe | 실행 파일 | 아니요 | 예 |
오브젝트 파일은 이미 기계어에 가까운 내용을 담고 있지만, 아직 혼자 실행되지는 못합니다. 필요한 라이브러리와 연결되는 링크 과정이 남아 있기 때문입니다. 최종 실행 파일을 만들려면 오브젝트 파일을 링크합니다.
gcc hello.o -o helloWindows라면 다음처럼 해도 됩니다.
gcc hello.o -o hello.exe이 흐름을 기억해 두세요.
소스 파일(.c) → 오브젝트 파일(.o 또는 .obj) → 실행 파일나중에 여러 파일로 프로그램을 나누는 장에서 이 흐름이 다시 등장합니다. 그때는 main.c, math.c, student.c 같은 여러 파일이 각각 오브젝트 파일이 되고, 마지막에 하나의 실행 파일로 묶입니다.
전처리 결과도 볼 수 있다
C 코드의 맨 위에는 자주 이런 줄이 나옵니다.
#include <stdio.h>이 줄은 "표준 입출력 기능에 대한 선언을 가져오라"는 뜻입니다. 그런데 컴파일러는 이 줄을 그냥 지나치지 않습니다. 전처리 단계에서 관련 헤더 내용을 펼쳐 넣습니다.
전처리 결과만 보고 싶다면 다음 명령을 사용할 수 있습니다.
gcc -E hello.c -o hello.i그러면 hello.i라는 파일이 생깁니다. 열어 보면 깜짝 놀랄 수 있습니다. 우리가 쓴 코드는 몇 줄뿐인데, 전처리 결과는 훨씬 깁니다. stdio.h와 관련된 수많은 선언이 포함되기 때문입니다.
이 파일을 처음부터 끝까지 읽을 필요는 없습니다. 다만 #include가 단순한 장식이 아니라 실제로 컴파일 전에 처리되는 지시문이라는 점을 눈으로 확인할 수 있습니다.
어셈블리 코드까지 보고 싶다면 다음 명령도 가능합니다.
gcc -S hello.c -o hello.shello.s에는 CPU 명령에 더 가까운 어셈블리 코드가 들어 있습니다. 지금은 이해하지 못해도 괜찮습니다. 중요한 것은 C 코드가 여러 변환 단계를 거쳐 점점 기계에 가까운 형태로 바뀐다는 사실입니다.
자주 만나는 문제와 해결 감각
개발 환경을 처음 준비할 때는 코드보다 환경 문제에서 더 많이 막힙니다. 당황하지 않아도 됩니다. 대부분은 몇 가지 유형으로 정리됩니다.
| 증상 | 가능성이 큰 원인 | 해결 방향 |
|---|---|---|
gcc를 찾을 수 없다고 나온다 | GCC가 설치되지 않았거나 PATH가 잘못되었다 | gcc --version 확인, PATH 재설정, 터미널 재시작 |
| VS Code에서만 컴파일러를 못 찾는다 | VS Code가 PATH 변경 전에 열려 있었다 | VS Code 완전 종료 후 다시 실행 |
hello.c가 없다고 나온다 | 현재 터미널 위치가 파일이 있는 폴더가 아니다 | dir 또는 ls로 확인 후 cd로 이동 |
| 실행했는데 권한 오류가 난다 | 실행 파일 경로나 권한 문제 | macOS/Linux에서 ./hello 형태로 실행 |
| 한글 출력이 깨진다 | 터미널 인코딩 문제 | 일단 영어 출력으로 실습 후 인코딩 설정 확인 |
특히 현재 폴더 문제는 정말 자주 나옵니다. 터미널은 "지금 내가 어느 폴더에 있는지"를 기준으로 명령을 실행합니다. hello.c 파일이 바탕화면에 있는데 터미널은 다른 폴더에 있다면, 컴파일러는 당연히 hello.c를 찾지 못합니다.
현재 위치를 확인하려면 다음 명령을 사용합니다.
Windows PowerShell:
pwdmacOS/Linux:
pwdpwd는 print working directory의 약자로, 현재 작업 중인 폴더를 보여 줍니다. C를 배우다 보면 코드뿐 아니라 폴더, 파일, 경로에도 익숙해져야 합니다. 이것도 시스템 감각의 일부입니다.
컴파일 옵션을 조금만 붙여 보자
처음에는 다음 명령만으로 충분합니다.
gcc hello.c -o hello하지만 앞으로는 경고를 더 잘 보기 위해 다음과 같은 옵션을 자주 사용할 것입니다.
gcc -Wall -Wextra hello.c -o hello-Wall은 중요한 경고를 많이 켜라는 뜻이고, -Wextra는 추가 경고도 더 보여 달라는 뜻입니다. 이름만 보면 -Wall이 모든 경고를 뜻하는 것 같지만, 실제로는 대표적인 경고 묶음에 가깝습니다. 그래도 입문자에게는 매우 유용합니다.
예를 들어 변수를 만들어 놓고 사용하지 않거나, 반환값이 필요한 함수에서 값을 반환하지 않는 경우 컴파일러가 경고를 줄 수 있습니다. 경고는 오류가 아니기 때문에 실행 파일이 만들어질 수도 있습니다. 하지만 C에서는 경고를 가볍게 넘기면 나중에 찾기 어려운 버그가 됩니다.
좋은 습관은 간단합니다.
gcc -Wall -Wextra hello.c -o hello이 명령에 익숙해지세요. 컴파일러는 잔소리꾼이 아니라, 미래의 버그를 미리 알려 주는 조수입니다.
편집기 버튼보다 명령어를 먼저 익히는 이유
VS Code나 Visual Studio에서는 버튼 하나로 빌드하고 실행할 수 있습니다. Code Runner 같은 확장을 설치하면 단축키로 바로 실행할 수도 있습니다. 편리한 기능입니다.
하지만 초반에는 적어도 몇 번은 직접 명령을 입력해 보는 것이 좋습니다.
gcc hello.c -o hello
./hello이 두 줄을 직접 입력하면 다음 사실이 몸에 들어옵니다.
| 명령 | 의미 |
|---|---|
gcc hello.c -o hello | 소스 코드를 실행 파일로 만든다 |
./hello | 만들어진 실행 파일을 실행한다 |
gcc -c hello.c -o hello.o | 실행 파일이 아니라 오브젝트 파일까지만 만든다 |
버튼은 이 명령들을 대신 눌러 주는 도구입니다. 명령의 의미를 알고 버튼을 쓰면 편리함이 됩니다. 의미를 모른 채 버튼만 누르면 오류가 났을 때 어디서부터 봐야 할지 막막해집니다.
C언어는 친절하게 모든 것을 숨겨 주는 언어가 아닙니다. 대신 보려고 마음먹으면 많은 것을 보여 줍니다. 소스 파일, 오브젝트 파일, 실행 파일, 링크, 경고, 경로. 처음에는 낯설지만, 이 단어들이 하나씩 연결되면 컴퓨터가 프로그램을 실행하는 장면이 점점 선명해집니다.
작은 점검표
다음 항목을 확인해 보세요.
| 확인할 것 | 명령 또는 행동 | 성공 기준 |
|---|---|---|
| 컴파일러 설치 | gcc --version 또는 clang --version | 버전 정보가 출력된다 |
| VS Code 확장 | C/C++ by Microsoft 설치 | C 코드에 색상이 표시된다 |
| 작업 폴더 | pwd, ls 또는 dir | hello.c가 보인다 |
| 컴파일 | gcc hello.c -o hello | 실행 파일이 생성된다 |
| 실행 | ./hello 또는 .hello.exe | Hello, C!가 출력된다 |
여기까지 성공했다면 C언어를 배울 준비가 끝났습니다. 이제 우리는 코드를 작성할 수 있고, 그 코드를 실행 파일로 바꿀 수 있으며, 실행 결과를 확인할 수 있습니다.
다음 장에서는 방금 작성한 Hello, C! 프로그램을 한 줄씩 살펴봅니다. main은 왜 필요할까요? printf는 어디서 온 함수일까요? #include <stdio.h>는 정확히 무엇을 가져오는 걸까요? 이제 C 프로그램의 첫 문장을 제대로 읽을 차례입니다.
참고
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
