#define pr(a, b...) printf(a, b) /* (*A) */ #define pr(a, b...) printf(a, ##b) /* (*B) */ pr("Hello\n"); /* (*1) */ pr("Hello %s\n", "World"); /* (*2) */ pr("Hello %s %s\n", "My", "World"); /* (*3) */
GCC(C89)에서 사용할 수 있는 위의 두가지 macro는 언뜻 같아 보이지만 차이가 존재한다.
(*A) (*B) 모두 (*2)와 (*3) 같은 경우에서 정상적으로 잘 동작한다.
그런데, (*1)의 경우를 보면, 1은 macro에서 정의하고 있는 두번째 arguement가 없는 경우다. 즉 macro argument 'b'가 없다.
따라서 preprocessing결과를 생각해보면, (*A) (*B) 모두
printf(a, )
가 되어서 compile error가 나야 할 것 같은데, (*A)와 같이 정의하면, compile error가 발생하고, (*B)와 같이 정의하면 정상동작한다.
GCC spec.을 살펴보지 않았으나, 주의할 필요가 있어서 적어 둔다. (재미있지 않은가?)
'Language > C&C++' 카테고리의 다른 글
Using allocated memory like 2-D array. (0) | 2013.07.10 |
---|---|
[C/C++][Linux] Easy mistake regarding detaching when using pthread_create() without pthread_join(). (0) | 2012.10.05 |
[C/C++/JAVA] 변수를 block중간에 선언하는 방법에 대한 단상. (0) | 2011.11.23 |
[C/C++] enable/disable function/macro with define switch. (0) | 2011.11.23 |
[C/C++] Fail to build Android with g++/gcc-4.6 (Ubuntu-11.10) (0) | 2011.10.17 |