以下是一些在 Rust 和 C 语言中常见的语法元素的对照,这有助于理解两种语言之间的主要区别:
1. 变量定义
C:
1
2
|
int a = 10;
char b = 'b';
|
Rust:
1
2
3
|
let a = 10; // 不可变变量
let mut b = 'b'; // 可变变量
|
2. 函数定义
C:
1
2
3
4
|
int add(int x, int y) {
return x + y;
}
|
Rust:
1
2
3
4
|
fn add(x: i32, y: i32) -> i32 {
x + y // 注意:Rust 中不需要 return 语句
}
|
3. 条件语句
C:
1
2
3
4
5
6
|
if (a > b) {
// do something
} else {
// do something else
}
|
Rust:
1
2
3
4
5
6
|
if a > b {
// do something
} else {
// do something else
}
|
4. 循环
C:
1
2
3
4
|
for (int i = 0; i < 10; i++) {
// do something
}
|
Rust:
1
2
3
4
|
for i in 0..10 {
// do something
}
|
5. 结构体
C:
1
2
3
4
5
6
|
struct Point {
int x;
int y;
};
struct Point p = {10, 20};
|
Rust:
1
2
3
4
5
6
|
struct Point {
x: i32,
y: i32,
}
let p = Point { x: 10, y: 20 };
|
6. 指针和引用
C:
1
2
3
4
|
int x = 10;
int *ptr = &x;
*ptr = 20;
|
Rust:
1
2
3
4
|
let mut x = 10;
let ptr = &mut x; // 可变引用
*ptr = 20;
|
7. 数组
C:
1
2
|
int arr[3] = {1, 2, 3};
|
Rust:
1
2
|
let arr: [i32; 3] = [1, 2, 3];
|
8. 字符串
C:
1
2
|
char *str = "Hello, world!";
|
Rust:
1
2
3
|
let str = "Hello, world!"; // 不可变字符串切片
let mut string = String::from("Hello, world!"); // 可变字符串对象
|
9. 错误处理
C:
1
2
|
// 通常通过返回特定的错误码或使用全局变量 errno
|
Rust:
1
2
3
4
5
6
|
// 使用 Result 类型或 panic! 宏
fn do_something() -> Result<(), String> {
// ...
Ok(())
}
|
10. 内存管理
C:
1
2
3
4
|
int *ptr = malloc(sizeof(int));
// 使用 ptr
free(ptr);
|
Rust:
1
2
3
4
|
let mut ptr = Box::new(10); // 自动管理内存
// 使用 ptr
// 内存自动释放
|
总结
这些对照表展示了 Rust 和 C 语言在语法和内存管理方面的一些基本区别。
Rust 的设计注重安全性和现代化,其语法倾向于表达明确性和类型安全。
虽然这些差异可能需要一定的学习曲线,但 Rust 的特性(如所有权系统、模式匹配、安全的并发编程等)为编写高效、可靠和安全的代码提供了强大的支持。