블로그
-
C++ 정적 초기화 순서 문제(Static Initialization Order Fiasco): 재현과 함수 내 static·constinit 해결
다른 .cpp 파일의 전역 객체가 아직 초기화되지 않은 상태에서 쓰여 크래시가 나는 Static Initialization Order Fiasco를 링크 순서만 바꿔 재현하고, 함수 내 static, constinit, Nifty Counter 같은 해결책을 비교합니다.
-
C++ 헤더 온리 라이브러리 만들기: inline·템플릿·constexpr과 ODR, multiple definition 피하기
구현을 헤더에 두면서도 multiple definition 링커 에러 없이 배포하려면 inline, 템플릿, constexpr가 ODR과 어떻게 맞물리는지 알아야 합니다. extern template로 인스턴스화를 줄이는 법과 컴파일 시간, ABI 관점의 비용도 짚습니다.
-
C++ undefined reference to vtable: 첫 비인라인 가상 함수 정의 누락과 해결
undefined reference to vtable 링커 에러는 대개 클래스의 첫 번째 비인라인 가상 함수나 소멸자의 정의가 빠졌을 때 납니다. vtable이 어느 번역 단위에 생성되는지부터 설명하고, .cpp 정의 추가, 인라인 정의, = default로 고치는 방법을 보여줍니다.
-
디버그에선 되고 릴리스에서 죽는 코드: C++ 미정의 동작 15가지 패턴과 UBSan
미정의 동작(Undefined Behavior, UB)은 C++ 표준이 결과를 정의하지 않은 코드입니다. 대표적인 UB 패턴 15가지, 디버그와 릴리스에서 동작이 달라지는 이유, UBSan으로 탐지하는 방법을 정리합니다.
-
C++ multiple definition 링커 에러: 헤더 정의 중복의 원인과 해결
헤더에 함수나 전역 변수를 정의했다가 링크 단계에서 multiple definition 에러가 날 때, ODR 규칙으로 원인을 짚고 inline·static·extern 중 무엇으로 고칠지 비교표와 헤더/소스 분리 예제로 판단할 수 있게 합니다.
-
C++ const 에러: passing as const 컴파일 에러 원인과 const 정합성
passing as const, discards qualifiers, read-only variable 대입처럼 const 때문에 나는 컴파일 에러 10가지를 원인별로 풀고, const 멤버 함수와 오버로드, 포인터에서 const 위치를 읽는 법, mutable과 const_cast를 써도 되는 경우를 예제로 설명합니다.
-
C++ include 에러 No such file or directory: 헤더 경로·대소문자·순환 include 해결
No such file or directory로 헤더를 못 찾을 때 파일명 오타, -I 경로 누락, Linux의 대소문자 구분, 순환 include 중 무엇이 원인인지 가려내고, CMake·Visual Studio 경로 설정과 전방 선언으로 해결하는 방법을 다룹니다.
-
CMake Error 자주 나는 10가지: find_package 실패·target not found·캐시 오염 해결
find_package가 패키지를 못 찾거나 target not found, 버전 부족, 경로 공백, 오염된 빌드 디렉토리 때문에 CMake가 멈출 때, 에러 메시지별로 원인을 가려내고 CMakeLists.txt를 어떻게 고치면 되는지 수정 코드로 보여줍니다.
-
C++ 반복자 무효화: vector iterators incompatible 크래시 원인과 해결
vector iterators incompatible 같은 크래시를 일으키는 반복자 무효화를 vector·list·map·unordered_map·deque별 규칙으로 정리하고, 범위 기반 for에서 erase하는 실수를 포함한 10가지 오류 패턴과 안전한 삭제 방법을 설명합니다.
-
C++ 템플릿 에러 메시지 읽는 법: 첫 줄·note·candidate 순서와 자주 나오는 패턴
수백 줄짜리 C++ 템플릿 에러에서 맨 위 첫 줄, note: because, candidate 목록 순으로 원인을 찾는 방법을 설명하고, no matching function이나 incomplete type 같은 10가지 패턴과 GCC·Clang·MSVC 메시지 차이를 비교합니다.