본문 바로가기
컴퓨터일반

C/C++ 매개변수를 갖는 매크로, #, ## 연산자

by __observer__ 2012. 10. 29.
반응형

C/C++ 코딩시 매크로는 #define 을 사용하여 다음과 같이 정의하곤 합니다.

 

단순하게 상수등을 다음과 같이 정의하곤 하지만~

 

#define PI     (3.141592)

 

상수 뿐만이 아니라 매개변수등도 이용할 수가 있습니다.

 

사용법은 굉장히 단순한데요.

 

다음과 같이 원의 넓이를 구하는 매크로를 구성할 수 있습니다.

 

#define CIRCLE(x) ((x)*(x)*(PI))

 

매크로 정의시에는 항상 모든 부분들을 괄호를 이용하여 꼼꼼하게~ 묶어 주는 게 좋습니다. 그렇지 않으면~~ 까딱 잘못하다가 예상치 못한 결과를 얻을 수 있거덩여~

 

다음으로 # 연산자를 간단하게 소개하겠습니다.

 

이미 많은 분들이 아시겠지만, # 연산자는 매개변수를 문자화 하는 연산자 입니다.

 

다음과 같이 사용합니다.

 

#define STRING(x) #x

 

위와 같이 define 을 하고 STRING(Character) 하면~ " Character" 라고 문자열로 정의한것과 마찬가지 입니다.

 

이제 마지막으로 ## 연산자에 대해 소개해 드리죠~

 

아래와 같이 정의하고~

#define X(n) x##n

 

X(1) 이라고 하면~ 이는 변수 x1 을 입력한 것과 동일합니다. 즉. ## 연산자는 토큰들을 결합하는 역할을 하는거죠.

 

x1, x2, x3 …. 등과 같이 정의하고 싶다면~ ## 연산자를 이용해서 처리 할 수 있겠죠~

 

위 설명한 부분에 대해 간단하게 예제를 만들어 보았습니다.

 

#include <iostream>

 

using namespace std;

 

 

#define PI     (3.141592)

 

#define CIRCLE(x) ((x)*(x)*(PI))

#define STRING(x) #x

 

#define INT_X(n) int x##n = n

#define COUT_X(n) cout << "x"#n" = " << x##n <<endl

 

 

int main()

{

// 원의 넓이

cout << "반지름 4인 원의 넓이 : " << CIRCLE(4) << endl ;

 

// 매크로 # 연산자

cout << "# 연산자 예 : " << STRING(문자열로~) << endl ;

 

// 매크로 ## 연산자

 

INT_X(0);

INT_X(1);

INT_X(2);

INT_X(3);

 

COUT_X(0);

COUT_X(1);

COUT_X(2);

COUT_X(3);

 

 

return 0;

}

 

위 코드를 실행 시켜 보면 다음과 같은 결과가 나타납니다.


#, ## 연산자를 이용한 매크로는 디버그시 특히 유용하다 하더군요~ 


아래 주소에서 macro 에 대한 좋은 예들을 볼 수 있다.  

http://www.cprogramming.com/tutorial/cpreprocessor.html



반응형

댓글