본문 바로가기

프로그래밍 활용(TIP)

inline 함수 사용시 발생할수 있는 LNK2019 오류

inline 키워드를 사용하여 함수를 inline화 시키게 되면, 함수에 정의부에 있는 내용을 함수를 호출한 부분에 대체 함으로써 성능을 향상 시킬수 있다. 하지만 함수의 정의부에 내용이 많을경우에는 별로 좋지 않은 방법이다.

나는 잘 모르고 있었지만, 우리가 inline 키워드를 이용해 inline화 하는것은 단지 컴파일러에게 '요청'하는 것일 뿐이며, 판단은 컴파일러가 한다고 한다. 이 말은, 컴파일러에 의해 '요청'한 부분이 무시될수도 있고, 성능향상을 위해 컴파일러가 자동으로 inline화를 수행하기도 한다는 소리다.( 똑똑하군..)

inline함수를 만들때 주의해야 할 점은, 반드시 "inline 함수의 선언과 정의를 헤더파일과 구현파일로 분리해서는 안된다!" 이다.. 실제로 내가 경험한 내용이지만, 헤더파일(*.h)에 인라인 함수의 선언부를 써놓고, 구현파일(*.cpp)에 정의를 했을경우에는 'LNK2019' 라는 녀석을 만나게 될것이다.

컴파일 단계에서 검출되는 error나 warning과 달리 LNK(링크오류)는 진단하기가 상당히 까다롭기 때문에, 특별히 주의해야 한다.

이 문제를 해결하기위해서는 앞서 얘기했던것처럼 "inline 함수의 선언과 정의를 분리하지말고, 헤더파일에 선언과 정의를 하면된다"