728x90
반응형
# 의 의미
매크로에서 # 연산자는 문자열로 치환 시켜주는 연산자 입니다.
아래 코드에서 TEST\n은 define에서 "TEST\n" 으로 치환이 됩니다.
1) 기본
#include <iostream>
#define PRINT(s) printf(#s)
int main()
{
PRINT(TEST\n);
}
>TEST
2) 응용
가변 인자를 사용하여 macro를 다양하게 만들기
define 선언 부분에서 가변인자는 ... 으로 표시 되며 정의 부분에서는 ##__VAR_ARGS__ 와 mapping이 됩니다.
가변 인자 참고 사이트
- https://jhnyang.tistory.com/298
#include <iostream>
#define PRINT(s, ...) printf(#s, ##__VA_ARGS__)
int main()
{
PRINT(TEST000 0 %d\n, 10);
}
##의 의미
##은 두 개의 토큰을 이어준다. 혹은 붙여준다. 의 의미로 생각하시면 됩니다.
OpenSSL에서 유용하게 사용되며 예제는 다음과 같습니다.
예 ) 구조체이름이 길고 뒤에 접미사만 바뀔때 유용 합니다.
- 아래 코드에서 STACK_OF(type) 정의를 보면 구조체의 뒷부분만 type을 사용해서 변경 하고 있습니다.
즉 stack_st_ 과 type을 이어서 표현 할 수 있게 해줍니다.
# define STACK_OF(type) struct stack_st_##type
STACK_OF(SSL_CIPHER) *cipher_list;
/* same as above but sorted for lookup */
STACK_OF(SSL_CIPHER) *cipher_list_by_id;
/* TLSv1.3 specific ciphersuites */
STACK_OF(SSL_CIPHER) *tls13_ciphersuites;
728x90
반응형
'ProgrammingLang > c++' 카테고리의 다른 글
[C++개발자되기]22. golang의 defer 만들기 (0) | 2021.07.10 |
---|---|
[C++ 개발자되기] 21. c++ 키워드 정리 (0) | 2021.07.05 |
[C++ 개발자되기] 19. 과거 시간 구하기 (0) | 2020.04.09 |
[C++ 개발자되기] 18. std::vector 기본 사용법 (0) | 2020.03.27 |
[C++ 개발자되기] 17. std::cout 출력 포맷 변경 iomanip (2) | 2020.03.18 |