2013-10-18 2 views
2

이러한 매크로 '이 t은 SKIP_TEXT 또는 JOIN_TEXT처리기 교체

#include <stdio.h> 

#define SKIP_TEXT(text) 
#define JOIN_TEXT(text) text 

#define S(s) S_EXEC(s) 
#define S_EXEC_SKIP(s) s /* Here I want to skip text */ 
#define S_EXEC_JOIN(s) s /* Here I want to join text */ 
#define S_EXEC(s) S_EXEC_##s 

int main(void) 
{ 
    printf("%s\n", S(SKIP("a" TEXT("b") "c" TEXT("d"))); 
    printf("%s\n", S(JOIN("a" TEXT("b") "c" TEXT("d"))); 
    return 0; 
} 
TEXT을 교체하는 방법을 알고

S()에서 인수를 평가할 수있는 방법이 있습니까?

+0

아니요, 전 처리기 매크로는 인수를 분리 할 수 ​​없습니다. –

답변

1

간단한 매크로 확장 대신 매크로 내부에 기호가 필요하므로 사용자에게 묻는 것은 불가능합니다.

간단한 대안은 아마 다음과 같습니다

#define TEXT SKIP_TEXT 
printf("%s\n", "a" TEXT("b") "c" TEXT("d")); 
#define TEXT JOIN_TEXT 
printf("%s\n", "a" TEXT("b") "c" TEXT("d")); 

또는 SKIP_TEXT/JOIN_TEXT -macros없이 :

#define TEXT(x) 
printf("%s\n", "a" TEXT("b") "c" TEXT("d")); 
#define TEXT(x) x 
printf("%s\n", "a" TEXT("b") "c" TEXT("d")); 

#undef TEXT 아마 각 printf 후 필요합니다.