Rust Language Book 에서 chapter 5.2 에서 struct을 배우는 간단한 프로그래밍인데, Debug를 위한 rust 기능들이 있어서 이를 기록하기 위해서 작성하였다.
간단하게 struct는 c/c++에서 사용하는 방법과 비슷한다.
struct Rectangle {
width : u32,
height : u32,
}
fn main() {
let rect1 = Rectangle {
width : 30,
height : 50,
};
println!("rect1 is {}", rect1); // Compile error
}
/* 에러 내용
= help: the trait `std::fmt::Display` is not implemented for `Rectangle`
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
*/
선언까지는 문제없이 진행된다. (여기까지가 Struct 사용법안내) 다만 c/c++와 동일하게 구조체자체를 print하려고 하면 에러가 발생한다. (여기서 부터 Debug를 위한 rust 기능 설명)
에러 내용을 보면 {} 형식보다 {:?} 또는 {:#?} 을 사용하라고 한다.
println!("rect1 is {:?}", rect1); // Compile error
/* 에러 내용
= help: the trait `Debug` is not implemented for `Rectangle`
= note: add `#[derive(Debug)]` to `Rectangle` or manually `impl Debug for Rectangle`
*/
하라는 대로 했더니 또 에러가 난다. 에러내용을 읽어보면 해당 내용을 추가하라고 한다.
#[derive(Debug)]
struct Rectangle {
width: u32,
height: u32,
}
fn main() {
let scale = 2;
let rect1 = Rectangle {
width: dbg!(30 * scale),
height: 50,
};
println!("rect1 is {:?}", rect1);
}
위와 같이 정리하고, cargo run을 실행해보면 문제없이 출력 되는 것을 볼 수 있다. [src/main.rs:14] 출력 부분.
$ cargo run
Compiling rectangles v0.1.0 (file:///projects/rectangles)
Finished dev [unoptimized + debuginfo] target(s) in 0.61s
Running `target/debug/rectangles`
[src/main.rs:10] 30 * scale = 60
[src/main.rs:14] &rect1 = Rectangle {
width: 60,
height: 50,
}
[src/main.rs:10] 부분을 보면, 구조체 인스턴스를 선언한 부분에 dbg!(30 * scale)을 통해서 디버그 로그를 찍은 것을 볼 수 있다. 아래의 코드와 동일하지만, 디버그용 로그를 찍어주는 것을 볼 수 있다.
fn main() {
let scale = 2;
let rect1 = Rectangle {
width: 30 * scale,
height: 50,
};
}
해당 글에서 세가지를 배웠다.
1. 구조체 쓰는 방법
2. Display 메소드(?)가 추가되어있지 않는 상황에서 현재 구조체 상황을 알기위해 #[derive(Debug)] 와 {:#?} 사용 방법
3. 디버그를 위한 dbg!() 사용법
728x90
반응형
'프로그래밍 > 프로그래밍언어' 카테고리의 다른 글
[rust] Ownership 3 - Reference (0) | 2022.01.01 |
---|---|
[rust] Ownership 2 (0) | 2021.12.28 |
[rust] Ownership 1 (0) | 2021.12.27 |
[rust] note: the msvc targets depend on the msvc linker but `link.exe` was not found (0) | 2021.12.22 |
[rust] 윈도우에서 러스트 시작해보기 (0) | 2021.12.22 |