Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

abortunwind

이전 섹션에서는 에러 핸들링 메커니즘인 panic을 설명했습니다. 패닉 설정에 따라 서로 다른 코드 경로를 조건부로 컴파일할 수 있습니다. 현재 사용 가능한 값은 unwindabort입니다.

앞선 레모네이드 예제를 바탕으로, 서로 다른 코드 라인을 실행해 보기 위해 패닉 전략을 명시적으로 사용합니다.

fn drink(beverage: &str) {
    // 설탕이 든 음료를 너무 많이 마시면 안 됩니다.
    if beverage == "레모네이드" {
        if cfg!(panic = "abort") {
            println!("여긴 당신 파티가 아니에요. 도망쳐요!!!!");
        } else {
            println!("뱉어내요!!!!");
        }
    } else {
        println!("상쾌한 {}만 있으면 돼요.", beverage);
    }
}

fn main() {
    drink("물");
    drink("레모네이드");
}

여기 drink()를 다시 작성하고 unwind 키워드를 명시적으로 사용하는 또 다른 예제가 있습니다.

#[cfg(panic = "unwind")]
fn ah() {
    println!("뱉어내요!!!!");
}

#[cfg(not(panic = "unwind"))]
fn ah() {
    println!("여긴 당신 파티가 아니에요. 도망쳐요!!!!");
}

fn drink(beverage: &str) {
    if beverage == "레모네이드" {
        ah();
    } else {
        println!("상쾌한 {}만 있으면 돼요.", beverage);
    }
}

fn main() {
    drink("물");
    drink("레모네이드");
}

패닉 전략은 커맨드 라인에서 abort 또는 unwind를 사용하여 설정할 수 있습니다.

rustc  lemonade.rs -C panic=abort