다중 라인 전 처리기 매크로를 만드는 방법은 무엇입니까? 한 줄을 만드는 방법을 알고 있습니다.
#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))