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