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; │
└────────────────────────────────────────────┘
즉 변수의 이름들을 둘로 나눌 수 있을 때, 또는 상황에 맞게 서로 다른 변수들을 사용하고자
할 때 ## 연산자를 사용하면 편한 경우가 많다.
프리프로세서문 내에서만 사용할 수 있는 연산자들이 있는데, 다음과 같이 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 |