จะปิดการใช้งานคำเตือนรหัสที่ไม่ได้ใช้ใน 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คุณสมบัติใน struct, โมดูล, ฟังก์ชั่นอื่น ๆ :

    #[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
โปรดทราบว่าคนสุดท้ายจะเรียกการคอมไพล์ใหม่ของทุกสิ่ง
โจเซฟการ์วิน

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 คุณอาจต้องการตัวแปรที่มีอยู่สำหรับผลข้างเคียงของ destructor แต่ไม่ได้ใช้เป็นอย่างอื่นไม่สามารถใช้เพียง _ สำหรับกรณีการใช้งานนี้เนื่องจาก _ ไม่ใช่ตัวแปรที่มีผลผูกพันและค่า จะถูกดร็อปเมื่อสิ้นสุดคำสั่ง " จากstackoverflow.com/a/48361729/109618
David J.

9

การทำให้โค้ดเป็นแบบสาธารณะยังเป็นการหยุดคำเตือน คุณจะต้องmodเปิดเผยสิ่งที่แนบมาด้วยเช่นกัน

วิธีนี้เหมาะสมเมื่อคุณเขียนไลบรารี: รหัสของคุณเป็น "ไม่ได้ใช้" ภายในเนื่องจากมีวัตถุประสงค์เพื่อใช้งานโดยรหัสลูกค้า


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.