블로그
-
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++ 스택 오버플로우 크래시: 깊은 재귀·큰 지역 배열 진단과 스택 크기 조정
깊은 재귀나 큰 지역 배열 때문에 세그폴트로 죽는 스택 오버플로우를 진단하고, 재귀를 반복문이나 명시적 스택으로 바꾸거나 데이터를 힙으로 옮기는 방법, ulimit과 링커 옵션으로 스택 크기를 조정하는 법까지 다룹니다.
-
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 경로 설정과 전방 선언으로 해결하는 방법을 다룹니다.
-
C++ 멀티스레드 간헐적 크래시: ThreadSanitizer로 데이터 레이스 찾고 mutex·atomic으로 고치기
싱글스레드에선 멀쩡하던 코드가 멀티스레드에서 간헐적으로 죽을 때, ThreadSanitizer로 데이터 레이스를 찾아내고 mutex·lock_guard·atomic 중 무엇으로 동기화할지, 데드락과 거짓 공유는 어떻게 피할지 예제로 설명합니다.
-
C++ use-after-move 버그: std::move가 캐스팅일 뿐인 이유와 이동 의미론 실수 10가지
std::move는 캐스팅일 뿐이라는 사실에서 출발해 이동된 객체를 다시 쓰는 use-after-move 버그, const 객체 이동, return에 std::move를 붙여 RVO를 막는 실수 등 이동 의미론 에러 10가지와 고치는 방법을 다룹니다.
-
C++ 람다 캡처로 생기는 dangling reference: 값 캡처·shared_ptr·[*this]로 수명 지키기
참조로 캡처한 지역 변수가 스코프를 벗어난 뒤 람다가 실행되면 dangling reference 크래시가 납니다. 값 캡처와 shared_ptr, [*this]로 수명을 지키는 방법과 비동기 콜백이나 람다 반환에서 자주 하는 캡처 실수를 예제로 다룹니다.