SourcePawn의 전처리 매크로


SourcePawn 스크립트에서도 C++처럼 전처리문 #define을 통한 매크로 상수, 함수를 작성할 수 있는 것을 떠올려 똑같이 작성해보았는데 원했던 대로 작동이 되지 않아 다시 확인해야 했다. 특히 매크로에 대한 항목은 공식 문서에서는 언급도 되지 않은 내용이라 아예 공개된 컴파일러 소스의 어휘 분석을 확인해야 했다.
물론 정확하게 확인했다는 생각이 아직 안 들지만 우선 참고로 적어둔다.

컴파일러 코드에 의하면 아래와 같이 선언하여 작성된 매크로 이름에 코드를 치환할 수 있다.

// 정수
#define SOME_VARIABLE	100
#define SOME_VARIABLE	(1 << 8)

// 소수
#define	SOME_VARIABLE	100.0

// 문자(열)
#define	SOME_VARIABLE	'c'
#define	SOME_VARIABLE	"Hello world!"

// 기타 등등.. 단순 치환은 같은 형식을 응용하여 사용할 수 있다.

또한 매개변수를 추가할 수도 있다.
단, C++와는 다르게 이름을 별도로 지정할 수 없고 %(변수 순서) 형식으로만 사용할 수 있다.

#define min(%1,%2)            (((%1) < (%2)) ? (%1) : (%2))
#define max(%1,%2)            (((%1) > (%2)) ? (%1) : (%2))

C++처럼 매개변수 앞에 #를 붙여 문자열로 변환할 수도 있다.

#define string(%1) #%1

마지막으로 C++에서는 매크로에 멀티라인을 지원하지만 SourcePawn에서는 지원하지 않는다.
단순히 한 줄로 묶어서 처리할 수 있지만 문법에서 새로운 라인을 요구하는 키워드가 있다면 컴파일러에서 에러 1(expected new line, but found ...)를 내뱉는다.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다