Hello World #

一、程序概述 #

按照编程语言学习的传统,让我们从Hello World程序开始,了解Rust程序的基本结构。

二、创建源文件 #

2.1 创建项目目录 #

bash
mkdir -p ~/projects/hello_world
cd ~/projects/hello_world

2.2 创建源文件 #

创建 main.rs 文件:

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

三、程序解析 #

3.1 主函数 #

rust
fn main() {
    // 程序入口
}
  • fn:定义函数的关键字
  • main:主函数名,程序入口
  • ():参数列表(空)
  • {}:函数体

3.2 打印语句 #

rust
println!("Hello, World!");
  • println!:宏(注意感叹号)
  • "Hello, World!":字符串字面量
  • ;:语句结束符

3.3 宏与函数的区别 #

println! 是宏而不是函数,宏以 ! 结尾:

rust
// 宏
println!("Hello");
println!("Number: {}", 42);

// 函数(假设存在)
print("Hello"); // 这不是有效的Rust代码

四、编译与运行 #

4.1 编译程序 #

bash
rustc main.rs

编译成功后,生成可执行文件:

  • Linux/macOS:main
  • Windows:main.exe

4.2 运行程序 #

bash
# Linux/macOS
./main

# Windows
.\main.exe

输出:

text
Hello, World!

4.3 编译流程 #

text
源代码 (.rs) → 编译器 (rustc) → 可执行文件

五、格式化输出 #

5.1 基本格式化 #

rust
fn main() {
    let name = "Rust";
    let year = 2024;
    
    println!("Hello, {}!", name);
    println!("Year: {}", year);
}

5.2 位置参数 #

rust
fn main() {
    println!("{0} {1} {0}", "a", "b");
    // 输出:a b a
}

5.3 命名参数 #

rust
fn main() {
    println!("{name} is {age} years old", name = "Alice", age = 30);
    // 输出:Alice is 30 years old
}

5.4 格式化特性 #

rust
fn main() {
    // 二进制
    println!("Binary: {:b}", 10);
    // 输出:Binary: 1010
    
    // 十六进制
    println!("Hex: {:x}", 255);
    // 输出:Hex: ff
    
    // 八进制
    println!("Octal: {:o}", 8);
    // 输出:Octal: 10
    
    // 宽度与对齐
    println!("{:>10}", "right");   // 右对齐,宽度10
    println!("{:<10}", "left");    // 左对齐,宽度10
    println!("{:^10}", "center");  // 居中,宽度10
    
    // 数字精度
    println!("{:.2}", 3.14159);    // 保留2位小数
    // 输出:3.14
}

六、打印宏对比 #

Rust提供多个打印宏:

输出位置 换行 用途
print! 标准输出 不换行打印
println! 标准输出 换行打印
eprint! 标准错误 错误输出
eprintln! 标准错误 错误输出换行
format! 返回字符串 - 格式化字符串
rust
fn main() {
    print!("不换行");
    print!("继续");
    println!(" 然后换行");
    
    eprintln!("这是错误信息");
    
    let s = format!("格式化: {}", 42);
    println!("{}", s);
}

七、调试打印 #

7.1 Debug格式化 #

使用 {:?}{:#?} 打印调试信息:

rust
fn main() {
    let arr = [1, 2, 3, 4, 5];
    println!("Array: {:?}", arr);
    // 输出:Array: [1, 2, 3, 4, 5]
    
    let tuple = ("Alice", 30, true);
    println!("Tuple: {:?}", tuple);
    // 输出:Tuple: ("Alice", 30, true)
}

7.2 Display vs Debug #

rust
fn main() {
    let s = "Hello";
    
    // Display格式化(美观)
    println!("{}", s);
    
    // Debug格式化(调试)
    println!("{:?}", s);
}

八、注释 #

8.1 普通注释 #

rust
// 单行注释

/*
 * 多行注释
 * 第二行
 */

8.2 文档注释 #

rust
/// 这是文档注释(支持Markdown)
/// 用于函数、结构体等
/// 
/// # Examples
/// 
/// ```
/// let x = add(1, 2);
/// assert_eq!(x, 3);
/// ```
fn add(a: i32, b: i32) -> i32 {
    a + b
}

//! 模块级文档注释
//! 描述整个模块或crate

九、编译选项 #

9.1 常用编译选项 #

bash
# 指定输出文件名
rustc main.rs -o hello

# 优化编译
rustc -O main.rs

# 显示警告
rustc -W main.rs

# 生成汇编
rustc --emit=asm main.rs

# 显示编译时间
rustc --time main.rs

9.2 检查代码 #

bash
# 只检查,不生成可执行文件
rustc --check main.rs

十、rustc vs Cargo #

10.1 rustc的局限 #

  • 不管理依赖
  • 不支持项目结构
  • 无增量编译

10.2 Cargo的优势 #

  • 依赖管理
  • 项目模板
  • 测试支持
  • 文档生成

对于实际项目,推荐使用Cargo。

十一、实践练习 #

练习1:个人信息 #

编写程序打印你的个人信息:

rust
fn main() {
    let name = "张三";
    let age = 25;
    let city = "北京";
    
    println!("姓名: {}", name);
    println!("年龄: {}", age);
    println!("城市: {}", city);
    println!("---");
    println!("{} 今年 {} 岁,住在 {}", name, age, city);
}

练习2:简单计算 #

rust
fn main() {
    let a = 10;
    let b = 3;
    
    println!("{} + {} = {}", a, b, a + b);
    println!("{} - {} = {}", a, b, a - b);
    println!("{} * {} = {}", a, b, a * b);
    println!("{} / {} = {}", a, b, a / b);
    println!("{} % {} = {}", a, b, a % b);
}

练习3:ASCII艺术 #

rust
fn main() {
    println!("  /\\_/\\  ");
    println!(" ( o.o ) ");
    println!("  > ^ <  ");
}

十二、总结 #

本章学习了:

  • Rust程序的基本结构
  • fn main() 主函数
  • println! 宏的使用
  • 格式化输出语法
  • 注释的写法
  • 编译与运行流程

下一章,我们将学习Cargo项目管理工具。

最后更新:2026-03-27