C++를 배우다 보면, 어느 순간부터 코드보다
에러 메시지가 더 무서워지는 순간을 마주하게 됩니다.
분명 강의에서는 이해했다고 생각했는데,
막상 직접 코드를 작성하고 실행하면
컴파일 에러, 링크 에러, 심지어 실행 중 에러까지 연달아 등장하죠.
“이게 왜 안 되는 거지?”
“내가 뭔가 크게 잘못한 건가?”
이런 생각이 들면서
많은 분들이 C++ 학습 과정에서
한 번쯤은 성장을 멈춰버리는 지점에 서게 됩니다.
하지만 분명히 짚고 넘어가야 할 사실이 하나 있습니다.
에러는 실력이 부족해서 생기는 문제가 아니라,
실력이 자라고 있다는 증거라는 점!
이번 글에서는 많은 분들이 가장 헷갈려 하는
✔ 컴파일 에러
✔ 링크 에러
✔ 런타임 에러의 차이를
실제 예제와 함께 하나씩 정리해보며,
“에러를 피하는 방법”이 아니라
“에러를 읽고 해결하는 방법”에 집중해 보려고 합니다.
<같이 보면 좋을 C++ 위기 극복 시리즈>
C++ 프로그래밍 언어 7강 : Template 공포증 극복하기
그리고 여기서 많은 분들이 프로그래밍 언어 C++ 학습 중 처음 마주하는 코드! <같이 보면 좋을 C++ ...
blog.naver.com
C++ 프로그래밍 언어 8강: STL 미로 탈출 가이드
[ C++ 위기 극복 시리즈 이전 강의 살펴보기 ] 1. STL 이란 무엇인가? 2. 흐름도 : STL 사용 원리 3...
blog.naver.com
1. 컴파일과 링크의 차이
C++ 빌드 과정은 크게 두 단계로 나뉩니다.
1) 컴파일(Compile)
● 소스 코드(.cpp)를 기계어 코드(.obj, .o)로 변환
● 문법 오류, 타입 오류 등을 잡아냄
2) 링크 (Link)
● 여러 개의 오브젝트 파일(.obj, .o)과 라이브러리를 합쳐 실행 파일 생성
● 선언만 있고 정의가 없을 때 발생하는 에러가 주로 링크 단계에서 나타남
즉, 컴파일 에러 = 문법 문제, 링크 에러 = 코드 연결 문제입니다.
2. 흐름도 : 빌드 과정
[소스 코드]
↓ (컴파일)
[오브젝트 파일]
↓ (링크)
[실행 파일]
어디서 에러가 발생했는지에 따라 원인을 좁힐 수 있습니다.
3. 예제 1 : 컴파일 에러 (문법 오류)
#include <iostream>
using namespace std;
int main()
{
cout << "Hello" << endl
return 0;
}
출력
error : expected ';' before 'return'
● 원인 : 세미콜론( ; ) 빠짐
● 해결 : endl 뒤에 ; 추가
4. 예제 2 : 링크 에러 (정의 누락)
#include <iostream>
using namespace std;
void Hello(); // 선언만 있음
int main()
{
hello();
return 0;
}
// hello.cpp
// void hello() {cout << "Hello"; } ← 이 부분을 실수로 빼먹음
출력
LNK2019 : unresolved external symbol "void __cdecl hello(void)"
● 원인 : 선언만 있고 정의가 없음
● 해결 : hello() 함수 정의 추가
5. [예제 3] : 런타임 에러 (실행 중 오류)
int arr[3] = {1, 2, 3};
cout << arr[5]; // 범위 초과
출력
Segmentation fault (core dumped)
● 원인 : 배열 인덱스를 벗어남.
● 해결 : 인덱스 범위를 반드시 확인
6. 비전공자들이 자주 하는 오해
1) 에러 = 망했다
● 에러는 자연스러운 과정. 오히려 "코드가 어디서 틀렸는지 알려주는 힌트"입니다.
2) 메시지가 너무 길어서 무의미하다.
● 사실 중요한 부분은 앞부분(에러 종류, 라인 번호) 입니다.
3) 링크 에러 = 컴파일러 버그
● 대부분은 선언 / 정의 불일치, 빌드 설정 문제입니다.
7. 실행 추적 예시(에러 메세지 읽기)
에러 메세지 예:
main.cpp(10): error C2143: syntax error: missing ';' before 'return'
읽는 순서:
1) 파일명 : main.cpp
2) 줄번호 : (10)
3) 에러종류 : syntax error
4) 원인 : 세미콜론 누락
이렇게 분류해서 읽으면 쉽게 원인을 찾을 수 있습니다.
8. 극복 전략
● 에러 메세지를 무시하지 말고, 앞부분부터 차근차근 해석하기.
● 컴파일 에러는 주로 세미콜론, 괄호, 타입 불일치 문제.
● 링크 에러는 주로 선언과 정의 불일치, 라이브러리 누락 문제.
● 에러를 만날 때마다, "디버깅 훈련"이라고 생각하기.
9. 마무리 요약
● 컴파일 에러 : 문법 문제(코드 자체에 오류).
● 링크 에러 : 연결 문제(선언/정의 불일치 문제).
● 런타임 에러 : 실행 중 문제(배열 범위, 잘못된 포인터 등).
에러는 장애물이 아니라, 코드가 개선될 수 있도록 알려주는 힌트이다
💬다음 편에서는 10편 - 디버깅의 벽 넘기를 통해,
지금까지 우리를 괴롭혀왔던 에러들을
가장 강력하게 해결할 수 있는 무기,
‘디버거’ 사용법을 본격적으로 다뤄볼 예정입니다.
특히, 현재 저희 어소트락 게임아카데미에서는
교육생들이 에러 메시지 앞에서 멈춰 서지 않도록,
단순한 문법 설명이 아닌 문제 해결 능력 자체를 키우는 방향으로 교육을 진행하고 있습니다.
왜 이 에러가 발생했는지, 디버거로 어디를 먼저 확인해야 하는지,
수정 이후 어떤 결과를 기대해야 하는지 이 모든 과정을
실습 중심 수업과 1:1 피드백을 통해 반복적으로 경험하게 되죠.
▼(언리얼엔진)3D게임 클라이언트 개발자 양성과정▼
어소트락게임아카데미
언리얼공인교육기관(UATC), 언리얼공인개발자서포터(UDN), DIRECTX 자체게임엔진 프로그래머양성 전문 교육기관
assortrock.com
뿐만 아니라, 어소트락 유튜브 채널에서는 기초 문법과
개발 환경 이해를 중심으로 한
무료 강의 콘텐츠도 함께 제공하고 있습니다.
본격적인 실습에 앞서,
기초 개념을 정리하는 용도로 활용해 보셔도 좋겠죠?
그렇다면, 이제 에러를 피하는 단계에서 벗어나
에러를 다룰 줄 아는 개발자로
한 단계 성장해 볼 차례!
다음 편, 디버깅의 벽을 함께 넘어가 보겠습니다.
실전 개발 흐름, 제대로 경험해 보고 싶다면?
현재 모집 중인 어소트락 교육과정
※2월 9일 개강 예정※
국비지원 언리얼엔진
3D 게임 클라이언트 개발자 양성과정
어소트락게임아카데미
언리얼공인교육기관(UATC), 언리얼공인개발자서포터(UDN), DIRECTX 자체게임엔진 프로그래머양성 전문 교육기관
assortrock.com
30% 할인코드 제공 중
[온라인] DirectX11 기반 자체게임엔진 제작 과정
'무료강의 > 프로그래밍 원리' 카테고리의 다른 글
| C++ 왕초보 강의 10강:디버깅의 벽 이해하기 (0) | 2025.12.31 |
|---|---|
| C++ 왕초보 강의 8강: STL 멘붕 탈출 가이드 (0) | 2025.12.29 |
| C++ 왕초보 강의 7강 : Template 한 번에 정리하기 (0) | 2025.12.19 |
| C++ 왕초보 강의 6강 : 객체지향 레벨업! 상속·다형성 완전정복 (0) | 2025.12.12 |
| C++ 왕초보 강의 5강 : 클래스 입문과 this 포인터 완전 정복 (0) | 2025.12.10 |
