헤더의 중복 정의와 inline 예제
세 가지 경우를 별도 폴더로 나누었습니다. 아래 명령은 저장소의 루트에서 실행합니다. duplicate는 의도적으로 링크 오류가 발생하는 예제입니다.
중복 정의가 발생하는 경우
clang++ -std=c++17 -O0 examples/inline/duplicate/a.cc examples/inline/duplicate/main.cc -o /tmp/blog_duplicate
macOS의 Clang에서는 duplicate symbol 링크 오류가 발생합니다.
헤더에는 선언, .cc에는 정의를 두는 경우
소스: add.h, add.cc, a.cc, main.cc
clang++ -std=c++17 -O0 examples/inline/separate/a.cc examples/inline/separate/main.cc examples/inline/separate/add.cc -o /tmp/blog_separate
/tmp/blog_separate
헤더에 inline 정의를 두는 경우
clang++ -std=c++17 -O0 examples/inline/inline/a.cc examples/inline/inline/main.cc -o /tmp/blog_inline
/tmp/blog_inline
정상적인 두 예제의 출력은 모두 다음과 같습니다.
3 7