본문 바로가기
Research/Programming

#, ##

by sunnyan 2002. 12. 4.
728x90
※ 프리프로세서문을 위한 연산자

프리프로세서문 내에서만 사용할 수 있는 연산자들이 있는데, 다음과 같이 3개가 있다.

┌────────────────────────────────────────────┐
│ #, ##, defined                                                                                                                │
└────────────────────────────────────────────┘

#과 ##은 주로 #define을 사용하여 매크로를 정의할 때 사용되는 연산자들로 #은 바로 뒤의 인

자를 스트링으로 바꾸어주는 역할을 한다. 예를 들어 어떤 정수 변수의 이름과 그 값을 출력시키

는 매크로를 작성하고자 할 때 다음과 같이 하면 된다.

┌────────────────────────────────────────────┐
│ #define PRI(x) printf(#x "= %dn",x)                                                                                │
└────────────────────────────────────────────┘

위 예에서 x앞에 '#' 연산자를 사용하고 있다. 위와 같이 정의한 후 다음과 같이 매크로를 사용

하게 되면

┌────────────────────────────────────────────┐
│ PRI(i);                                                                                                                          │
└────────────────────────────────────────────┘

이는 다음과 같이 바뀌게 된다.

┌────────────────────────────────────────────┐
│ printf("i" "= %dn",i);                                                                                                      │
└────────────────────────────────────────────┘

즉 #x에 의해 x가 스트링 x, 즉 "x"로 바뀌게 되어 "i"가 되며 두 개의 스트링을 연접해서 사용

하면 이는 하나의 스트링으로 간주되므로, 다음과 같은 결과가 된다.

┌────────────────────────────────────────────┐
│ printf("i = %dn",i);                                                                                                        
└────────────────────────────────────────────┘

'#' 연산자는 위와 같이 인자의 이름을 출력하거나 스트링에 포함시키고자 할 때 주로 사용하고

있다.

반면에 '##' 연산자는 x##y의 형태로 사용하는데, x와 y를 붙여 하나의 이름으로 만든다. 예를

들어 다음과 같이 사용할 수 있다.

┌────────────────────────────────────────────┐
│ #define CON(x,y) (x##y)                                                                                                │
└────────────────────────────────────────────┘

위와 같이 정의해 놓고 다음과 같이 사용하면

┌────────────────────────────────────────────┐
│ CON(i,1) = 100;                                                                                                             │
└────────────────────────────────────────────┘

이는 다음과 같이 바뀌게 된다.

┌────────────────────────────────────────────┐
│ i1 = 100;                                                                                                                        │
└────────────────────────────────────────────┘

즉 변수의 이름들을 둘로 나눌 수 있을 때, 또는 상황에 맞게 서로 다른 변수들을 사용하고자

할 때 ## 연산자를 사용하면 편한 경우가 많다.


728x90

'Research > Programming' 카테고리의 다른 글

변수사용에 관하여...  (0) 2003.11.26
make:하나의 목표에 대하여 여러 명령을 쓰면  (0) 2002.12.05
C Bit Fields  (0) 2002.12.04
__cdecl을 사용하는 이유 ?  (0) 2002.12.04
register와 volatile 키워드의 역할  (0) 2002.12.04