[c++] 다중 라인 전 처리기 매크로

다중 라인 전 처리기 매크로를 만드는 방법은 무엇입니까? 한 줄을 만드는 방법을 알고 있습니다.

#define sqr(X) (X*X)

하지만 다음과 같은 것이 필요합니다.

#define someMacro(X)
    class X : public otherClass
    {
         int foo;
         void doFoo();
    };

이 작업을 수행하려면 어떻게해야합니까?

이것은 예시 일 뿐이며 실제 매크로는 매우 길 수 있습니다.



답변

당신은 사용할 \줄 연속 이스케이프 문자로.

#define swap(a, b) {               \
                       (a) ^= (b); \
                       (b) ^= (a); \
                       (a) ^= (b); \
                   }

편집 : @abelenky가 주석에서 지적했듯이 \문자 는 줄의 마지막 문자 여야합니다 . 그렇지 않은 경우 (나중에 공백 일지라도) 그 뒤의 각 줄에 혼란스러운 오류 메시지가 표시됩니다.


답변

\각 줄 끝에 백 슬래시 ( )를 추가하여 매크로를 여러 줄로 확장 할 수 있습니다 .

#define F(x) (x)   \
              *    \
             (x)


답변

참고 Kerrek SB와 coaddict 등은 허용 대답에 지적되어 있어야하는 지적
항상 당신의 인수 주변의 장소 중괄호. sqr 예제는 CompSci 코스에서 가르치는 간단한 예제입니다.

문제는 다음과 같습니다. “sqr (1 + 5)”라고 말하면 어떻게됩니까? 당신은 “1 + 5 * 1 + 5″또는 11
을 얻
습니다 그 주위에 중괄호를 올바르게 배치 #define sqr(x) ((x)*(x))
하면 ((1 + 5) * (1 + 5)) 또는 우리가 원하는 36 … 아름다움을 얻을 수 있습니다.

Ed S.는 ‘swap’과 같은 문제를 겪을 것입니다.


답변

줄의 끝에서 개행을 이스케이프해야합니다 \.

#define sqr(X) \
        ((X)*(X))


답변