[ C ] 전처리기 이해하기5_매크로 연산자 #, ## 정의/예제
C언어 문법 매크로 연산자 #, ## 정의/예제
아래의 매크로 문장은 어떤 결과를 만들까요?
매크로 함수: #define STRING_NAME(A, B) "A의 이름은 B이다"
매크로 문장: STRING_NAME(하헤호후, 아무개)
예상 결과: 하헤호후의 이름은 아무개이다.
진짜 결과: X (문자열 안에서는 매크로의 매개변수의 치환이 발생하지 않기 때문)
이런 상황에서 매개변수 치환이 이루어지게 하는 연산자, #이 있습니다.
■ # 연산자: 치환
#는 치환의 결과를 문자열로 구성하는 연산자입니다.
#define STRING_NAME(ABC) #ABC
STRING_NAME(랄랄라)라는 문장은 선행처리기에 의해 문자열 "랄랄라"로 치환됩니다. 또한 나란히 선언하면 하나의 문자열로 간주됩니다. 그래서 아래 문장은
char * str = STRING_NAME(랄랄라) STRING_NAME(바다로);
다음의 문자열 선언과 동일해집니다.
char * str = "랄랄라" "바다로";
char * str = "랄랄라바다로";
그럼 이제 STRING_NAME으로 위에서 해결하지 못한 문제를
#define STRING_NAME(A, B) #A " 의 이름은 " #B "이다."
이런 함수로 해결하면 되겠네요.
■ ## 연산자: 결합
##는 매크로 함수의 전달인자를 다른 대상(전달인자, 숫자, 문자, 문자열 등)과 이어줄 때 사용합니다.
#define CON(A, B) A ## 00 ## B
위의 매크로 몸체에서 A와 B가 순서대로 이어질 수 있도록 ## 연산자가 사용되었습니다. 그래서 다음과 같은 문장을 삽입하면
int num = CON(11, 22);
컴파일 전에 선행처리기에 의해 다음과 같이 변환됩니다.
int num = 110022;
-----------------------------------
-----------------------------------