: 인라인 함수의 치환을 적용하려면 프로젝트 설정을 해야함.
//참고
http://insidecoding.blogspot.com/2015/10/inline-function.html
설정 하지 않으면,
설정하면, call되지 않고, 치환 처리 되는 것을 확인할 수 있음.
위의 결과를 보고 생각을 해보면, 인라인 함수를 사용할 경우, 기계어 단계에서 3줄로
처리되는 것을 확인할 수 있음. 함수 호출보다 2줄이 절약됨.
하지만, 인라인함수 정의가 길다면, 치환되는 코드양이 많아지므로, 컴파일 후에
생성되는 코드양이 많아질 수 있음.
-> 이를 통해 작은 양의 코드만 인라인 처리해야 함을 파악할 수 있음.
: 함수포인터는 일단 변수, 즉 실행시간에 사용될 함수를 고름.
하지만, 인라인 함수는 컴파일 시에 코드에 치환 되는 것임.
- 결과
따라서 함수포인터에 인라인 함수를 넣더라도 치환을 되지 않음.
함수 포인터의 형식과 inline 함수의 경우 형식이 다름.- 예시
-> 함수 포인터에 인라인을 넣었지만, 함수가 call 되는 것을 확인할 수 있음.
깨알팁
- 링커가 함수의 주소를 찾는 일을 함.
- 컴파일 시, 파일은 따로 따로 진행하지만,
링크 과정에서 연결된 cpp와 헤더를 결합하는 과정을 함.
-> 왜 링크에러가 발생했냐면?
: 컴파일 시점에서 Add.h에 선언된 인라인 Add2를 치환하는데, 치환한 값이 선언부이므로 링크에러가 발생함.
그런데 왜 일반 함수인 Add1은 문제가 되지 않냐면? 컴파일 과정에서 Call 기계어로 변환된 후, 링크 과정에서 Add1의 함수주소를 찾아나서게 되므로 함수 호출의 경우는 문제가 없음!