Rust에서 사용하지 않는 코드 경고를 비활성화하는 방법은 무엇입니까?


229
struct SemanticDirection;

fn main() {}
warning: struct is never used: `SemanticDirection`
 --> src/main.rs:1:1
  |
1 | struct SemanticDirection;
  | ^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(dead_code)] on by default

나는이 경고들을 심각한 것에 대해 다시 켤 것이나, 나는 단지 언어에 땜질을하고 있고 이것은 나를 박쥐로 이끌고있다.

#[allow(dead_code)]내 코드에 추가하려고 시도했지만 작동하지 않았습니다.

답변:


351

다음 중 하나를 수행 할 수 있습니다.

  • allow구조체, 모듈, 함수 등에 속성을 추가하십시오 .

    #[allow(dead_code)]
    struct SemanticDirection;
    
  • 크레이트 레벨 allow속성 추가 ; 주목하십시오 !:

    #![allow(dead_code)]
  • 그것을 전달하십시오 rustc:

    rustc -A dead_code main.rs
  • 환경 변수 를 cargo통해 사용 RUSTFLAGS하십시오.

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build

5
마지막 것은 모든 것의 재 컴파일을 유발합니다.
Joseph Garvin

RUSTFLAGS는 내가 필요한 것입니다 cargo test. 감사.
likebike

60

이 경고를 비활성화하는 다른 방법은 다음과 같이 식별자 앞에 접두사를 추가하는 것입니다 _.

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

예를 들어 SDL 창에서 유용 할 수 있습니다.

let _window = video_subsystem.window("Rust SDL2 demo", 800, 600);

밑줄로 접두사가 붙는 것은 단독 밑줄을 이름으로 사용하는 것과 다릅니다. 다음을 수행하면 창이 즉시 파괴되어 의도 한 동작이 아닐 수 있습니다.

let _ = video_subsystem.window("Rust SDL2 demo", 800, 600);

"밑줄을 지정하면 그것을 파괴 할 것"이라는 행동은 이상하게 보입니다 (하지만 당신이 옳다는 것을 의심하지는 않습니다). 그것에 대한 참조가 있습니까?
Michael Anderson

4
@MichaelAnderson "RAII를 참조하십시오. 소멸자 부작용으로 변수가 존재하기를 원하지만 다른 방법으로 사용하지 않을 수 있습니다. _는 변수 바인딩이 아니고 값이므로이 유스 케이스에 단순히 _를 사용할 수 없습니다. 성명서 끝에서 삭제 될 것입니다. " 에서 stackoverflow.com/a/48361729/109618
데이비드 J.

9

코드를 공개 하면 경고가 중지됩니다. 인클로저를 mod공개 해야합니다 .

이것은 라이브러리를 작성할 때 의미가 있습니다. 코드는 클라이언트 코드에서 사용되기 때문에 내부적으로 "사용되지 않습니다".


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.