|
전 처리기 안에 전처리기 문을 실행하는게 아니라 표시하고 싶어요
즉, 아래와 같이 이을때
MM_STATE 하면 define에 따라 치환 되잖아요
그런데 치환될때 __cplusplus 여부에따라 extern "C" { } 블럭이 포함하게 하고 싶은데
내부에 있는 #ifdef 부분이 해석되지 않고 그냥 포함시키게 하려면 어찌 해야할지 모르겠네요
아래와 같이 하면 내부의 #ifdef 가 컴파일러가 해석하려해서 에러 납니다.
단지 #만 어찌 표시할 수 있으면 쉽게 풀릴것 같은데
이런건 잘 설명된것도 없군요...
(아래꺼는 __cplusplus 를 밖으로 빼서 MM_STATE 를 두개로 만들면 해결될것 같지만
어찌됐건 궁금해서 올려 봅니다.)
#define MM_STATE \
/* Definitions of global variables */ \
MM_Environment mmEnv; \
#ifdef __cplusplus \
extern "C" { \
#endif \
void \
MM_InitWrapper(MM_Environment *env, unsigned int envSize) \
{ \
extern void MM_Init(); \
\
char **envPtr = (char **)env; \
char **mmPtr = (char **)(&mmEnv); \
char **envEnd = (char **)((char *)envPtr + envSize); \
char **mmEnd = (char **)((char *)mmPtr + sizeof(MM_Environment)); \
\
/* Copy fields from env to mmEnv, one pointer at a time */ \
while (mmPtr < mmEnd && envPtr < envEnd) \
*mmPtr++ = *envPtr++; \
\
/* If env doesn't define all of mmEnv's fields, set extras to NULL */ \
while (mmPtr < mmEnd) \
*mmPtr++ = (char *)0; \
\
/* Call user's MM_Init function */ \
MM_Init(); \
} \
#ifdef __cplusplus \
} \
#endif \
|