static __inline struct type * <== 궁금해요~~~
글쓴이: free_style / 작성시간: 금, 2005/10/21 - 6:22오후
아래 코드 보고 궁금한 점이 생겼는데요...
질문 1:
static __inline struct type * <== 모르겠삼..??
질문 2:
name##_SPLAY_NEXT <== 모르겠삼..??
질문 3:
일반 함수에.. static에 선언되어졌을때 어떠한 현상이 생깁니까?
static __inline struct type * \ name##_SPLAY_NEXT(struct name *head, struct type *elm) \ { \ name##_SPLAY(head, elm); \ if (SPLAY_RIGHT(elm, field) != NULL) { \ elm = SPLAY_RIGHT(elm, field); \ while (SPLAY_LEFT(elm, field) != NULL) { \ elm = SPLAY_LEFT(elm, field); \ } \ } else \ elm = NULL; \ return (elm); \ }
Forums:
Re: static __inline struct type * <== 궁금해요~~~
위 코드는 (딱 보기에) 매크로 함수 정의의 일부분입니다. 아마 윗줄에 #define BLAHBLAH(name) \ 로 시작하겠죠.
매크로 정의 안에서 ##는 서로 다른 두 토큰을 붙이는 데 사용합니다. 예를 들어서 BLAHBLAH(mystruct)라고 했다면, name##_SPLAY_NEXT는 mystruct_SPLAY_NEXT로 확장됩니다. 만약 name _SPLAY_NEXT라고 한다면 mystruct와 _SPLAY_NEXT라는 서로 다른 두 토큰(이 경우 "이름"이라고 생각하셔도 됩니다)으로 나뉘므로 원하는 결과가 나오지 않지요.
__inline의 경우... __로 시작하는 이름은 C 표준에서 구현체들(보통 컴파일러들)이 특수한 목적으로 사용할 수 있도록 예약해 놓은 이름입니다. 원래 C에는 inline 키워드가 없는데, 이 경우 예를 들자면 컴파일러에서 __inline이라는 이름을 예약해서 inline 키워드를 쓰는 효과를 내는 것입니다. (C99에서는 추가되었습니다만) 아마 gcc를 위한 코드일 겁니다.
- 토끼군
댓글 달기