6.1 조건부 컴파일(Conditional Compilation)
6.1 조건부 컴파일(Conditional Compilation)
Haxe는 #if, #elseif, #else를 사용하고 컴파일러 플래그를 검사해 조건부 컴파일을 허용합니다.
정의: 컴파일러 플래그(Compiler Flag) — 컴파일러 플래그는 컴파일 과정에 영향을 줄 수 있는 설정 가능한 값입니다. 이런 플래그는
-D key=value또는-D key(값이"1"로 기본 설정됨)로 명령줄을 호출해 설정할 수 있어요. 컴파일러는 또한 서로 다른 컴파일 단계 사이에 정보를 전달하기 위해 내부적으로 여러 플래그를 설정합니다.
이 예제는 조건부 컴파일의 사용을 보여줍니다:
class Main {
public static function main() {
#if !debug
trace("ok");
#elseif (debug_level > 3)
trace(3);
#else
trace("debug level too low");
#end
}
}
플래그 없이 컴파일하면 main 메서드 본문에 trace("ok"); 줄만 남습니다. 다른 분기는 파일 파싱 중에 폐기됩니다. 이 다른 분기들은 여전히 유효한 Haxe 구문을 포함해야 하지만, 코드는 타입 검사되지 않아요.
#if와 #elseif 뒤의 조건은 다음 표현식을 허용합니다:
- 어떤 식별자든 같은 이름의 컴파일러 플래그 값으로 치환됩니다. 명령줄의
-D some-flag는some-flag와some_flag플래그를 모두 정의한다는 점에 주목하세요. String,Int,Float상수의 값은 직접 사용됩니다.- 불리언 연산자
&&(and),||(or),!(not)는 기대대로 동작하지만, 전체 표현식은 완전히 괄호로 감싸져야 합니다.
본문
#if/#elseif/#else
#if 조건이 참이면 해당 분기만 컴파일하고 나머지 분기는 파일 파싱 중 폐기합니다. 폐기된 분기도 유효한 구문이어야 하지만 타입 검사는 되지 않습니다.
조건 표현식
조건은 식별자(플래그 값으로 치환), 문자열/숫자 상수, 그리고 완전히 괄호로 감싼 불리언 연산식(&&, ||, !)을 허용합니다.
플래그 설정
-D key=value 또는 -D key(기본값 "1")로 설정합니다. -D some-flag는 some-flag와 some_flag를 모두 정의해요.