본문 바로가기
컴퓨터 공학/C, C++

[ C ] 전처리기 이해하기5_매크로 연산자 #, ## 정의/예제

by hahehohoo 2020. 7. 28.
반응형

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;

 

 

 

-----------------------------------

C언어 문법 총정리

목록 보러가기 

-----------------------------------

 

반응형


댓글