C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23258] [질문] 전처리기에서 전처리기 안에 전처리기를 표시하고 싶어요.
김상훈 [] 790 읽음    2002-12-17 14:36
전 처리기 안에 전처리기 문을 실행하는게 아니라 표시하고 싶어요

즉, 아래와 같이 이을때

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    \       

+ -

관련 글 리스트
23258 [질문] 전처리기에서 전처리기 안에 전처리기를 표시하고 싶어요. 김상훈 790 2002/12/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.