Làm cách nào để tắt cảnh báo mã không sử dụng trong 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

Tôi sẽ bật lại những cảnh báo này cho bất cứ điều gì nghiêm trọng, nhưng tôi chỉ mày mò ngôn ngữ và điều này đang khiến tôi bực mình.

Tôi đã thử thêm #[allow(dead_code)]vào mã của mình, nhưng nó không hoạt động.

Câu trả lời:


352

Bạn có thể:

  • Thêm một allowthuộc tính trên struct, module, function, v.v.:

    #[allow(dead_code)]
    struct SemanticDirection;
  • Thêm một thuộc tính cấp độ thùngallow ; chú ý !:

    #![allow(dead_code)]
  • Chuyển nó tới rustc:

    rustc -A dead_code main.rs
  • Vượt qua nó sử dụng cargoqua các RUSTFLAGSbiến môi trường:

    RUSTFLAGS="$RUSTFLAGS -A dead_code" cargo build

5
Lưu ý rằng cái cuối cùng sẽ kích hoạt biên dịch lại mọi thứ.
Joseph Garvin

RUSTFLAGS là những gì tôi cần cho cargo test. Cảm ơn.
likebike

60

Một cách khác để vô hiệu hóa cảnh báo này là tiền tố định danh bằng cách _:

struct _UnusedStruct {
    _unused_field: i32,
}

fn main() {
    let _unused_variable = 10;
}

Điều này có thể hữu ích, ví dụ, với một cửa sổ SDL:

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

Tiền tố với một dấu gạch dưới khác với việc sử dụng một dấu gạch dưới đơn độc làm tên. Làm như sau sẽ ngay lập tức phá hủy cửa sổ, không chắc là hành vi dự định.

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

Hành vi "gán cho gạch dưới sẽ phá hủy nó" có vẻ kỳ quặc (mặc dù tôi không nghi ngờ bạn đúng). Bạn có một tài liệu tham khảo cho nó?
Michael Anderson

4
@MichaelAnderson Xem "RAII. Bạn có thể muốn có một biến tồn tại cho hiệu ứng phụ của hàm hủy, nhưng không sử dụng nó theo cách khác. Không thể sử dụng đơn giản _ cho trường hợp sử dụng này, vì _ không phải là một ràng buộc biến và giá trị sẽ bị loại bỏ vào cuối bản tuyên bố. " từ stackoverflow.com/a/48361729/109618
David J.

9

Công khai mã cũng dừng các cảnh báo; bạn cũng sẽ cần phải modcông khai bao vây .

Điều này có ý nghĩa khi bạn viết thư viện: mã của bạn "không được sử dụng" trong nội bộ vì nó được sử dụng bởi mã máy khách.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.