uboot를 분석하면서 pragma에 대해서 나오더군요. 그래서 찾아본김에 좀 자세히 봐서 올립니다. ^^
우선 pragma는 compiler에게 정보를 알려주는 compiler directive입니다.
pragma는 뒤에 딸려오는 것이 몇개 있는데, align, init, fini, pack, weak 입니다.
사실 pragma weak에 대해서 찾아보다가 이렇게 적게 되었네요. ^^
처음부터 하나씩 보자면, 우선 align은 memory-align이라고 보시면 될거 같습니다.
#pragma align 8 ( astring )
static char astring[256];
이런식으로 하면 8로 memory-align 시킨다고 합니다. 단 몇가지 제약 사항이 있는데 그 중에 한가지만, 위에 선언한 것처럼 static으로 하든가 아님 global variable로 하면 된다고 합니다.
두번째로 init은 program이 메모리에 로딩되면서 init으로 선언한 함수를 콜한다고 합니다. 즉 module programming에서 init_module이라고 생각하시면 됩니다. init_module( void ) 이런식으로 되어 있지요? 소스를 확인해보진 않았지만, init_module 역시 #pragma 처리 하지 않을까 생각됩니다. 암튼 init으로 정의된 함수는 function( void ) type으로 선언되어야 한다고 합니다. 뒤에 fini도 나오는 이건 init과 반대로 생각하시면 되고 나머지는 다 같습니다. ^^
이제 weak는 정의한 function을 weak global function으로 선언한다고 합니다.
#pragma a = b 이런식으로 해서 alias 형식으로도 사용 가능한거 같습니다. 참고한 싸이트 두개를 붙일테니 나머지는 한번 참고해보시면 될거 같습니다. 근데 하나는 sun.com을 통해서 본거고 하나는 winapi.com을 통해서 얻은거라 sun 컴파일러의 directive와는 약간 차이가 날 수도 있을거 같습니다. 근데 전체적으로 비슷하지 않을까 하는 생각은 드네요. ㅎㅎ 만약 틀린 점이 있다면 수정 부탁 드려요. ^^
http://docs.sun.com/app/docs/doc/805-4955/6j4mg806k?l=ko&a=view
http://www.winapi.co.kr/clec/cpp2/18-3-2.htm
댓글 2
.
pragma를 사용한적은 주로 align 문제였던것 같다. ㅎㅎ 수고많았어.