inline function

Embedded/Softwares 2010. 5. 16. 16:47
From : http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gcc/inline.html

inline 함수란 간단히 말해서 함수 call 없이 함수의 code 를 호출한 부분에 그대로 넣어주는 것이다.

inline 함수에 대해서 잘 설명한 글이다. 실제로 MSDN 을 보면 __inline 으로 쓰이고 함수의 주소를 컴파일러가 갖고 있거나 너무 inline 으로 쓰기에 크면 inline 함수가 되지 않는다 정도인데 역시 gcc 에서 찾아봐야 한다.

위의 링크에 있는 내용을 간략히(?) 내맘대로 정리하면 다음과 같다.

일 단 inline function 은 ISO C99 표준에 포함된다. 그전에는 없다는 애기다~. 하지만 GCC 상의 inline 과 ISO C99 표준의 inline 함수의 구현에 상당히 다른 점이 있다고 하니 VS2005 환경에서의 inline 함수는 많이 다를 수 있다는 점을 생각해 둬야 겠다.

이 글에서 눈에 띄는 점은 static / extern keyword 를 inline 과 썼을 때의 효과이다.
먼 제 static / inline 조합을 보면, 일반적으로 생각하면 static 이란 scope 를 명시적으로 그리고 제한하는 효과가 있고 이 것이 inline과 조합을 하면 왠지 inline 이 forced 되지 않을 까 (좀 더 효과적으로 동작) 하는 생각이 든다. 실제 위의 글에서도 호출자(caller) 에 inline 함수의 모든 호출이 통합된다고 하니 (함수의 주소 참조가 없고, 함수의 어셈블러 코드가 참조되지 않을 때) 효과가 있음을 알 수 있다.
단, 주의해야 할점은 inline 함수가 정의하기 전의 그것을 호출하는 함수가 있다거나 recursive 함수의 형태의 inline 함수라면 inline 효과가 사라진다는 점이다.

inline 함수인데 static 으로 선언하지 않는 경우는 거의 inline 효과가 없다고 볼 수 있다. 이 경우에는 이 함수가 다른 sources 파일에서 사용 될 수 있다고 가정하기 때문에 (컴파일러가) 일반적인 방식의 함수로 컴파일이 되기 때문에 "통합"이 되지 않는다.

extern / inline 의 조합의 경우 효과가 좋다. 이 두개의 조합은 함수의 정의를 오직 inlining 을 위해서만 사용한다. 실제 함수의 주소를 참조하거나 함수를 선언한다 해도, extern 이므로 직접적으로 참조되지 않고 또한 정의되지 않는 것 처럼 보인다. extern inline 의 경우 거의 macro 에 준하는 효과를 보여준다.

.....

inline 의 세계도 심오하다는 것을 느낄 수 있는 글인거 같다. 시간 날 때 한 번 읽어보고 google codesearch 같은 곳에서 예제를 찾아보면 좀 더 쾌적한 코딩을 할 수 있을 것이다. :-)


출처 : http://songhl1.tistory.com/entry/Inline-Function

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,