#define문에서 ##(paste token)의 사용법
글 작성자: astrocosmos
코드를 효과적으로 구현하기 위해 이것저것 보다가
#define문에서 paste token이라고 말하는 "##"의 사용법을 정리합니다.
그래서!!
이 ACID와 AI_SN의 값을 가져오고(GET), 세팅하는(SET) 함수가 필요한데
UL/DL에 대해서 모두 ACID와 AI_SN이 필요합니다.
이것을 아래와 같은 함수형태로 구현하고 싶었습니다.
int harq_ul_aisn[MAX_ACID];
int harq_dl_aisn[MAX_ACID];
int main(void)
{
int ul_aisn = HARQ_GET_AISN(ul, acid);
int dl_aisn = HARQ_GET_AISN(dl, acid);
HARQ_SET_AISN(ul, acid, ul_aisn^1);
HARQ_SET_AISN(dl, acid, dl_aisn^1);
return 0;
}
함수보다는 #define문으로 구현하고 싶었습니다.
그래서!! #define문의 "##"(paste token)을 이용하여 아래와 같이 구현했습니다.
#define HARQ_GET_AISN(dir, acid) (harq_##dir##_aisn[acid])
#define HARQ_SET_AISN(dir, acid, val) (harq_##dir##_aisn[acid] = val)
위 코드에서 "##"이 어떤식으로 쓰였는지 알 수 있습니다.
토큰은 전처리 과정에서 처리되는데 명칭, 숫자, 문자열, 문자, 구두점 등으로 구분이 됩니다.
harq_##dir##_aisn[acid] 의 dir에 "ul", "dl"이라는 명칭을 넣었습니다.
따라서,
HARQ_GET_AISN(ul, acid) 는 전처리 과정에서 harq_ul_aisn[acid]로 대체될 겁니다.
위에는 토큰이 중간에 위치하는 경우이고, 토큰이 맨앞이나 맨뒤에 위치할 경우에는 연결되는 부위에만 "##"을 넣어주시면 됩니다.
예를 들면 아래 코드와 같습니다.
토큰이 맨 앞에 위치할 경우
int ul_harq_aisn[MAX_ACID];
int dl_harq_aisn[MAX_ACID];
#define HARQ_GET_AISN(dir, acid) (dir##_harq_aisn[acid])
#define HARQ_SET_AISN(dir, acid, val) (dir##_harq_aisn[acid] = val)
int main(void)
{
int ul_aisn = HARQ_GET_AISN(ul, acid);
int dl_aisn = HARQ_GET_AISN(dl, acid);
HARQ_SET_AISN(ul, acid, ul_aisn^1);
HARQ_SET_AISN(dl, acid, dl_aisn^1);
return 0;
}
토큰이 맨 뒤에 위치할 경우
int harq_aisn_ul[MAX_ACID];
int harq_aisn_dl[MAX_ACID];
#define HARQ_GET_AISN(dir, acid) (harq_aisn_##dir[acid])
#define HARQ_SET_AISN(dir, acid, val) (harq_aisn_##dir[acid] = val)
int main(void)
{
int ul_aisn = HARQ_GET_AISN(ul, acid);
int dl_aisn = HARQ_GET_AISN(dl, acid);
HARQ_SET_AISN(ul, acid, ul_aisn^1);
HARQ_SET_AISN(dl, acid, dl_aisn^1);
return 0;
}
이런식으로 "##" paste token을 사용하시면 됩니다.
대부분의 C를 해오신 분들을 명확히 알고 계시겟지만, 초보자나 일부 몰랐던 분들을 위해서 정리할 겸 포스팅합니다.^^
도움이 되셨으면 좋겠네요.
728x90
댓글
이 글 공유하기
다른 글
-
ubuntu의 vsftpd 에서 root로 접속 허용하기!!
ubuntu의 vsftpd 에서 root로 접속 허용하기!!
2010.06.28 -
Ubuntu에서 root로 자동로그인하기!!
Ubuntu에서 root로 자동로그인하기!!
2010.05.25 -
vi 텍스트 찾기 바꾸기 관련 명령어 모음
vi 텍스트 찾기 바꾸기 관련 명령어 모음
2010.02.23 -
vi를 HEX editor로 사용하기
vi를 HEX editor로 사용하기
2010.02.11