#과 ##은 전처리기의 연산자로서 #define 전처리 과정에서만 사용하는 특수한 연산자이다. 사용 빈도가 높지는 않지만 잘 알아 두면 매크로의 활용도를 높여 반복되는 코드를 간단하게 작성할 수 있다.
Stringizing Operator - #
#define문의 인수 앞에 사용되며 피연산자를 문자열로 바꾸는 역할을 한다. 피연산자가 실인수로 치환된 후 양쪽에 따옴표를 붙여 치환된 결과 그대로 문자열 상수가 된다.
#define result(exp) printf(#exp" = %d\n",exp);
void main()
{
result(5*3);
result(2*(3+1));
}
결과는
5*3 = 15
2*(3+1) = 8
Merge Operator - ##
#define 문 내에서만 사용되며 형식 인수 사이에 위치한다. 형식 인수를 분리하여 각각 치환되도록 하며 치환 후에는 주변의 공백과 함께 사라져 두 인수의 치환 결과가 하나의 토큰으로 연결될 수 있도록 한다.
#define var(a,b) (a##b)
void main()
{
int var(Total, Score);
TotalScore=256;
printf("총점 = %d\n",TotalScore);
}
이해를 위해 또 다른 예제를 보면...
#include <iostream> //make function factory and use it #define FUNCTION(name, a) int fun_##name() { return a;} FUNCTION(abcd, 12); FUNCTION(fff, 2); FUNCTION(kkk, 23); #undef FUNCTION #define FUNCTION 34 #define OUTPUT(a) std::cout << #a << std::endl int main() { std::cout << "abcd: " << fun_abcd() << std::endl; std::cout << "fff: " << fun_fff() << std::endl; std::cout << "kkk: " << fun_kkk() << std::endl; std::cout << FUNCTION << std::endl; OUTPUT(million); //note the lack of quotes return 0; }
Output:
abcd: 12
fff: 2
kkk: 23
34
million
퍼옴~ : <http://liketheocean.tistory.com/entry/%EC%A0%84%EC%B2%98%EB%A6%AC%EA%B8%B0>
'Development > 헷갈리는 C언어' 카테고리의 다른 글
[C언어]C언어 자료형~^^ (0) | 2013.07.16 |
---|