10/27/2016

C언어 Symbol (수정중)

1. C 언어의 Symblol 

1.1 weak 

C언어에서 weak라는 symbol이 있는데 주로, function 앞에 붙혀서 사용을 한다.
이는 C++의 virtual sysmbol의 개념과 비슷한데,
weak function을 사용하면 함수의 override를 같은 이름의 중복(override) 허용을 한다.


사용법은 만약 첫번째 sfunc1을 사용하고 싶다면, 두번째 함수를 정의를 하지 않고
이를 호출하면 첫번째 func1이 호출이 된다.

하지만, 두번째 sfunc1() 사용하고 싶다면 이를 정의를 하여 중복(override) 허용이 되기에
이를 호출하면, 두번째 sfunc1() 호출이 된다.

weak int sfunc1()
{

}


int sfunc1()
{


}


이를 일반적인 사용법을 적용을 해보면 아래와 같다.

일반 처음 배포판은 weak로 작성을 하여 배포를 하여, release를 하게되면,
User들은 기본 배포판의 weak function 들을 사용해도 되지만, 이를 재정의해서 자신만의 함수로 사용을 해도 된다.


상위 개념은 객체지향의 virtual symbol과 유사하다.

ELF에서는 이를 dynamic linking 이라고 하며, 일반적으로 dynamic binding 이라고 부른다
왜냐하면, 일반적인 함수는 static binding 즉, Complie 시간에 모든것이 결정이 되지만,
위 함수는 호출 할 함수가 아직 결정이 되지 않았다.

shared library를 사용하게되면, 이는 linker는 dynamic linking 를 통해 호출할 함수를 찾아 호출하는 것이다.
 
http://occamsrazr.net/tt/8


Marcro (__LINE__, __FILE__, #expr, __func_)
http://yesarang.tistory.com/74


https://en.wikipedia.org/wiki/Weak_symbol
https://docs.oracle.com/cd/E19683-01/816-1386/chapter2-11/index.html