Skip to content

Hello World 详解

> 逐行解析 Hello World 程序,理解 Rust 程序结构与 println! 宏的用法。

再探 Hello World

逐行解析

概念名称: fn main() 是 Rust 程序的入口点,println! 是用于格式化输出的宏。

语法结构:
┌──────────────────────────────────────┐
│  fn main() {                          │
│      println!("格式串", 参数...);     │
│  }                                    │
│                                       │
│  fn       → 定义函数的关键字          │
│  main     → 程序入口(固定名称)      │
│  println! → 打印宏(! 表示宏)        │
│  {}       → 占位符,会被参数替换      │
└──────────────────────────────────────┘

最简示例

rust
fn main() {
    println!("Hello, World!");
}
▶ Run

详细示例

rust
fn main() {
    // 简单打印
    println!("Hello, World!");

    // 打印变量
    let name = "Rust";
    println!("Hello, {}!", name);

    // 打印多个变量
    let x = 10;
    let y = 20;
    println!("x = {}, y = {}", x, y);

    // 调试输出
    let numbers = vec![1, 2, 3];
    println!("numbers = {:?}", numbers);
}
▶ Run

关键代码说明:

代码含义为什么这样写
fn main()程序入口函数Rust 规定可执行文件必须有 main 函数
println!打印并换行的宏! 表示这是宏而非函数,编译时展开
"{}"占位符会被后续参数按顺序替换,类型自动推导
{:?}调试占位符用于打印实现了 Debug trait 的类型

println! 宏详解

基本用法

rust
fn main() {
    // 简单打印
    println!("Hello, World!");

    // 打印变量
    let name = "Rust";
    println!("Hello, {}!", name);

    // 打印多个变量
    let x = 10;
    let y = 20;
    println!("x = {}, y = {}", x, y);
}
▶ Run

格式化占位符

rust
fn main() {
    // {} - 默认格式
    println!("{}", 42);           // 42
    println!("{}", "hello");      // hello

    // {:?} - 调试格式
    println!("{:?}", vec![1, 2, 3]);  // [1, 2, 3]

    // 数字格式化
    let x = 42;
    println!("{:05}", x);     // 00042(5 位,前导零)
    println!("{:x}", x);      // 2a(十六进制)

    // 浮点数格式化
    let pi = std::f64::consts::PI;
    println!("{:.2}", pi);    // 3.14(保留 2 位小数)

    // 命名参数
    println!("{name} is {age} years old",
             name = "Alice", age = 25);

    // 位置参数
    println!("{0} {1} {0}", "hello", "world");
    // 输出:hello world hello
}
▶ Run

关键代码说明:

代码含义为什么这样写
{}默认占位符自动推导类型,适用于基本类型
{:?}调试占位符需要类型实现 Debug trait
{:.2}精度控制浮点数保留 2 位小数
{name}命名参数提高可读性,适合多参数场景

概念名称: print! 不换行,println! 自动换行,eprintln! 输出到标准错误。

语法结构:
┌──────────────────────────────────────┐
│  println!("格式串", 参数...);  // 换行 │
│  print!("格式串", 参数...);    // 不换行│
│  eprintln!("格式串", 参数...); // 错误 │
└──────────────────────────────────────┘

最简示例

rust
fn main() {
    println!("自动换行");
    print!("不");
    print!("换行");
    println!();  // 手动换行
}
▶ Run

详细示例

rust
fn main() {
    // println! 自动换行
    println!("第一行");
    println!("第二行");

    // print! 不换行
    print!("Hello, ");
    print!("World!");
    println!();  // 手动换行

    // eprintln! 打印到标准错误
    eprintln!("这是错误信息");
}
▶ Run

为什么用它?

rust
// 没有:手动处理换行符,容易遗漏
print!("第一行\n");
print!("第二行\n");

// 有:自动换行,代码更简洁
println!("第一行");
println!("第二行");

// 错误输出到 stderr,便于日志分离
eprintln!("错误:文件不存在");  // 可被重定向分离
▶ Run

小结

  • fn main() 是程序入口,每个可执行程序都必须有
  • println! 是宏(以 ! 结尾),不是函数
  • {} 是格式化占位符,支持多种格式化选项
  • print! 不换行,println! 自动追加换行符

练习题

详见:练习题