2016-09-02 5 views
2

조건부 컴파일 문을 사용하려고합니다. 디버그 빌드에만 존재해야하는 함수를 정의하는 것 외에도 디버그 빌드에만 존재하는 변수/상수/유형 세트를 정의하려고합니다.녹의 조건부 컴파일 속성은 몇 줄입니까?

#[cfg(debug)] 
pub type A = B; 
pub type B = W; 

#[cfg(other_option)] 
pub type A = Z; 
pub type B = I; 
let test = 23i32; 

이 경우 조건부 컴파일 속성에서 실제로 몇 줄의 "덮음"이 있습니까? 그것만이 (이 상황에서 내가 기대할 수있는) 하나인가? 변수의 전체 블록 (변수, 유형 및 두 함수 포함)이 조건에 의해 보장되는지 확인하는 방법이 있습니까?

답변

2

#[attribute]은 다음 item에만 적용됩니다. Rust book을 참조하십시오.

편집 : 현재 임의의 수의 선언에 대해 속성을 전파 할 수 있다고 생각하지 않습니다.

속성에 대한 자세한 정보 및 해당 응용 프로그램은 Rust reference에서 확인할 수 있습니다.

+0

고마워요! 녹 책을 검색했지만 조건부 컴파일에 대한 설명 만 둘러 보았습니다. 나를 올바른 곳으로 안내해 주셔서 감사합니다! – DerNils

+0

내 질문의 두 번째 부분은 여전히 ​​유지됩니다 : 컴파일러에게 그런 속성이 하나 이상의 선언을 포함해야한다고 말하는 방법이 있습니까? – DerNils

+3

@DerNils StackOverflow에 대한 간단한 팁 : 질문 - 게시물 당 하나의 질문 만하십시오. 질문이 매우 밀접하게 연관되어 있기 때문에 이런 경우에는 괜찮습니다. 그래서 당신의 미래를 위해서 : 단 한가지 질문 만하십시오. 그렇지 않으면 downvotes 위험이 있습니다. 그런 의미에서 환영합니다. –

3

당신은이 같은에만 디버그/릴리스에 존재해야 그룹 모든 것을 함께에 모듈을 사용할 수 있습니다

#[cfg(debug)] 
mod example { 
    pub type A = i32; 
    pub type B = i64; 
} 

#[cfg(not(debug))] 
mod example { 
    pub type A = u32; 
    pub type B = u64; 
} 

fn main() { 
    let x: example::A = example::A::max_value(); 
    println!("{}", x); 
} 

Playground link (놀이터 정의하지 않기 때문에이 항상 not(debug) 값을 출력되므로주의를 debug 기능, 심지어 디버그 모드에서도). debug 정의하면

, 이는 그렇지 않으면 4294967295 (a u32의 최대 값)을 출력한다, 2147483647 (AN i32의 최대 값)를 출력한다. 두 모듈 모두 각 항목에 대한 정의가 있어야하며 그렇지 않으면 컴파일 타임 오류가 발생합니다.

Attributes에 대해 읽지 않았다면 그렇게하는 것이 좋습니다. 내부 속성 (#![attribute])과 외부 속성 (#[attribute])의 차이점을 알고 있어야합니다.

+0

실제로 모듈을 사용하여 선언문을 래핑하려고했지만 마침내 결정을 내 렸습니다. 나에게 모듈은 내 코드를 구조화하는 방법이고 조건부 컴파일을 사용하여 구조를 미리 설정하고 싶지 않습니다. 비록 많은 양의 선언 (현재는 4 개만 수행해야 함)을 수행해야한다면 솔루션이라고 인정해야합니다. – DerNils

+0

4 개 선언 만 사용하면 실제로는 관리가 가능하지만 사용시 실제 오버 헤드는 없습니다. 모듈을 사용하고 아마도 몇 줄을 절약 할 수 있습니다. 특히 나중에 확장해야하는 경우에 특히 유용합니다. 모듈 사용에 반대하는 특별한 이유가 있습니까? 아니면 필요에 따라 너무 부피가 있습니까? – Aurora0001