← 설명 글로 돌아가기

헤더의 중복 정의와 inline 예제

세 가지 경우를 별도 폴더로 나누었습니다. 아래 명령은 저장소의 루트에서 실행합니다. duplicate는 의도적으로 링크 오류가 발생하는 예제입니다.

중복 정의가 발생하는 경우

소스: add.h, a.cc, main.cc

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 정의를 두는 경우

소스: add.h, a.cc, main.cc

clang++ -std=c++17 -O0 examples/inline/inline/a.cc examples/inline/inline/main.cc -o /tmp/blog_inline
/tmp/blog_inline

정상적인 두 예제의 출력은 모두 다음과 같습니다.

3 7

설명 글로 돌아가기