Rust程序结构与代码注释

news/2024/9/19 4:31:22/ 标签: rust, 算法, 开发语言

【图书介绍】《Rust编程与项目实战》-CSDN博客

《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com)

Rust编程与项目实战_夏天又到了的博客-CSDN博客

3.1  Rust程序结构

我们从一个最简单的程序入手,来观察一个Rust的程序结构。

【例3.1】  第一个Rust例子

   在命令行下用命令cargo new myrust新建一个Rust项目。

   打开VS Code,打开文件夹myrust,并在VS Code中打开src下的main.rs,然后输入如下    代码:

// my first program in Rust
fn main()
{println("Hello, world!");
}

   学过C语言的朋友,应该一目了然,这个程序就是打印输出一行字符串“Hello, world!”。

   按快捷键Ctrl+F5运行工程,在TERMINAL视图上可以看到运行结果:

Hello World!

以上代码是多数初学者学会写的第一个程序,它的运行结果是在屏幕上打出“Hello World!”这句话。虽然它可能是Rust可写出的最简单的程序之一,但其中已经包含每一个Rust程序的基本组成结构。下面我们就逐个分析其组成结构的每一部分:

// my first program in Rust

这是注释行。所有以两个斜线符号(//)开始的程序行都被认为是注释行,这些注释行是程序员写在程序源代码内,用来对程序进行简单解释或描述,对程序本身的运行不会产生影响。在本例中,这行注释对本程序是什么做了一个简要的描述。

fn main()

这一行为主函数(Main Function)的起始声明。fn是一个关键字,它用来声明新函数。关键字(Keyword)又称保留字,是整个语言范围内预先保留的标识符,用户不能用关键字作为变量名或函数名。

main函数是所有Rust程序运行的起始点。无论它是在源代码文件的开头、结尾还是中间,此函数中的代码总是在程序开始运行时第一个被执行。并且,由于同样的原因,所有Rust程序都必须有一个main函数。

main后面跟了一对圆括号,表示它是一个函数,main是函数名。Rust中所有函数都跟有一对圆括号,圆括号中可以有一些输入参数。main函数后面的花括号之间的内容称为函数体,里面的代码就是函数功能的具体实现,花括号必不可少。

println!("Hello, world!");

这一行用于向控制台打印输出一段字符串。println是一个宏,用于向控制台窗口输出内容,注意println后面紧跟了一个感叹号(!),这也是让人不爽的地方。我们后面还会详述宏println。注意这行代码以分号(;)结尾。分号标示了一个语句的结束,Rust的每一个代码语句都必须以分号结尾。Rust 程序员最常犯的错误之一就是忘记在语句末尾写上分号。

你可能注意到并不是程序中的所有行都会被执行。程序中可以有注释行(以//开头),然后有函数的声明(本例中为main函数),最后是程序语句(例如调用println!),最后这些语句行全部被括在主函数的花括号“{}”内。

本例中程序被写在不同的行中以方便阅读。其实这并不是必需的。本例也可以被写成一行   代码:

fn main() {println!("Hello, world!");}   // my first program in Rust

可以看到,函数名、函数体(花括号中的内容)、注释都写在一行中了,而且最终程序运行结果依旧不变。但我们通常习惯分行写代码,分行写代码更方便让人阅读。

在Rust中,语句之间的分隔是以分号(;)为分隔符的。以下程序包含更多语句:

// my first program in Rust
fn main()
{println!("Hello, world!");println!("Down with 996!");
}

这段代码将在VS Code终端窗口中输出两行字符串:

Hello, world!Down with 996!

输出“Hello, world!”和“Down with 996!”。在这个例子中,我们在两个不同的语句中调用了println!两次。再一次说明分行写程序代码只是为了方便阅读,因为这个main函数写成以下形式也没有任何问题:

fn main() {println!("Hello, world!");    println!("Down with 996!");}

为方便起见,也可以把代码分为更多的行来写:

// my first program in Rust
fn main(){println!("Hello, world!");println!("Down with 996!");
}

运行结果依旧是两行字符串。

注释(Comments)是源代码的一部分,但会被编译器忽略。注释不会生成任何执行代码。使用注释的目的只是使程序员可以在源程序中插入一些说明解释性的内容。

在程序中,Rust 支持两种插入注释的方法:

// line comment
/* block comment */

第一种方法为行注释,告诉编译器忽略从//开始至本行结束的任何内容。第二种为块注释,告诉编译器忽略在/*符号和*/符号之间的所有内容,可能包含多行内容。

在以下程序中,我们插入了更多注释内容。

/* my second program in Rust
with more comments */fn main()
{println!("Hello world!");println!("Down with 996!");
}

如果你在源程序中插入了注释而没有用//符号或/*和*/符号,编译器会把它们当成Rust的语句,那么在编译时就会出现一个或多个错误信息。


http://www.ppmy.cn/news/1527092.html

相关文章

AD的入门操作

锦囊 1、打开AD后,一般默认打开上一个工程,这个时候如果想要打开新的工程,那就必须要创建一个项目,然后再在项目中添加原理图库和PCB库。 2、大多数情况下,直接使用库,不用自己再画原理图和封装库。 3、…

python压缩图片的代码

从网上复制的,不知道对不对 def compress_image(infile, outfile, mb1500, step10, quality80):"""不改变图片尺寸压缩到指定大小:param infile: 压缩源文件:param outfile: 压缩文件保存地址:param mb: 压缩目标,KB:param step: 每次调…

多层建筑能源参数化模型和城市冠层模型的区别

多层建筑能源参数化(Multi-layer Building Energy Parameterization, BEP)模型和城市冠层模型(Urban Canopy Model, UCM)都是用于模拟城市环境中能量交换和微气候的数值模型,但它们的侧重点和应用场景有所不同。以下是…

Ubuntu 下载软件包时,提示 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决办法: 打开 软件和更新 先更新一下: sudo apt-get update 接下来再次安装你需要的软件包,例如: sudo apt install libsdl2-dev

【网络安全的神秘世界】渗透测试基础

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试基础 基于功能去进行漏洞挖掘 1、编辑器漏洞 1.1 编辑器漏洞介绍 一般企业搭建网站可能采用了通用模板&#xff…

JavaScript 事件处理

一、简介 ​ 事件:发生在HTML元素上的事情,可以是用户的行为,也可以是浏览器的行为,如 用户点击了某个HTML元素用户将鼠标移动到某个HTML元素上用户输入数据时光标离开页面加载完成 ​ 事件源:事件触发的源头&#xf…

C语言 | Leetcode C语言题解之题409题最长回文串

题目&#xff1a; 题解&#xff1a; int longestPalindrome(char * s) {int c[128]{0},ret0;for(int i0;i<strlen(s);i){c[s[i]];}for(int i0;i<128;i){retc[i]-c[i]%2;}return ret(ret!strlen(s)); }

VUE下拉选择分页,远程搜索

实现效果 实现思路 初始化加载第一页&#xff1b;监听下拉框的滚动事件&#xff0c;当滚动到底部的时候加载下一页&#xff1b;输入搜索时&#xff0c;重置为第一页加载&#xff1b;关闭下拉选择框时&#xff0c;判断如果存在搜索值&#xff0c;要清空搜索值、并加载第一页。 …

7天速成前端 ------学习日志 (继苍穹外卖之后)

前端速成计划总结&#xff1a; 全26h课程&#xff0c;包含html&#xff0c;css&#xff0c;js&#xff0c;vue3&#xff0c;预计7天内学完。 起始日期&#xff1a;9.16 预计截止&#xff1a;9.22 每日更新&#xff0c;学完为止。 学前计划 课…

keep-alive缓存不了iframe

最近做了个项目&#xff0c;其中有个页面是由 iframe 嵌套了一个另外的页面&#xff0c;在运行的过程中发现 KeepAlive 并不生效&#xff0c;每次切换路由都会触发 iframe 页面的重新渲染&#xff0c;代码如下&#xff1a; <router-view v-slot"{ Component }">…

Blender渲染太慢怎么办?blender云渲染已开启

动画行业蓬勃发展&#xff0c;动画制作软件亦持续推陈出新&#xff0c;当制作平台日益丰富&#xff0c;创作难度降低&#xff0c;创作效率提升&#xff0c;如何高效完成复杂动画的渲染就成了从业者更关心的问题。 云渲染技术的出现&#xff0c;无疑为动画制作者提供了前所未有…

Python 入门教程(4)数据类型 | 4.2、数据类型转换

文章目录 一、数据类型转换1、 整数&#xff08;int&#xff09;与浮点数&#xff08;float&#xff09;之间的转换2、字符串&#xff08;str&#xff09;与整数/浮点数之间的转换3、列表&#xff08;list&#xff09;与字符串之间的转换4、注意事项 一、数据类型转换 在Python…

Cpp快速入门语法(下)(2)

文章目录 前言一、函数重载概念与使用C为何支持函数重载&#xff1f; 二、引用概念语法特性权限(常引用)使用场景与指针的区别 三、内联函数四、auto关键字(C11)五、基于范围的for循环(C11)六、指针空值nullptr(C11)总结 前言 承前启后&#xff0c;正文开始&#xff01; 一、函…

Java网络编程 TCP通信(Socket 与 ServerSocket)

1.TCP通信原理 TCP通信涉及两个端点&#xff1a;客户端和服务器。服务器端使用 ServerSocket 监听特定端口&#xff0c;等待客户端的连接请求。客户端使用 Socket 连接到服务器的IP地址和端口。一旦连接建立&#xff0c;双方就可以通过输入输出流进行数据交换. ServerSocket是…

详细分析Uniapp中的轮播图基本知识(附Demo)

目录 前言1. 基本知识2. Demo2.1 基本2.2 自定义分页2.3 自定义动画 3. 扩展 前言 先看代码示例&#xff1a; 实现了一个带有分页指示器的轮播图组件 <template><view class"work-container"><!-- 轮播图 --><uni-swiper-dot class"uni…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 &#x1f378;前言 &#x1f37b;一、台式电脑基本组成 &#x1f37a;二、组装 &#x1f379;三、安装系统 &#x1f44b;四、系统设置 &#x1f440;五、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

TCP/IP网络编程概念及Java实现TCP/IP通讯Demo

背景 在当今数字化的世界中&#xff0c;网络通信是连接各种设备和系统的关键。TCP/IP协议作为互联网通信的基石&#xff0c;被广泛应用于各种网络场景。了解TCP/IP网络编程的概念&#xff0c;并掌握如何在Java中实现TCP/IP通讯&#xff0c;对于开发人员来说是非常重要的。 TC…

webpack打包原理

目录 1、搭建结构&#xff0c;读取配置参数2、配置参数对象初始化 Compiler&#xff08;new Compiler(webpackOptions)&#xff09;3、挂载配置文件中的插件&#xff0c;4、执行Compiler 中的 run 方法进行编译5、根据配置文件中的entry 配置项找到所有的入口6、从入口文件出发…

JavaScript 基础 - 第16天_AJAX入门

文章目录 Day01_Ajax入门目录学习目标01.AJAX 概念和 axios 使用目标讲解小结 02.认识 URL目标讲解小结 03.URL 查询参数目标讲解小结 04.案例-查询-地区列表目标讲解小结 05.常用请求方法和数据提交目标讲解小结 06.axios 错误处理目标讲解小结 07.HTTP 协议-请求报文目标讲解…

椋鸟C++笔记#7:标准模板库STL初识

文章目录 标准模板库&#xff08;Standard Template Library&#xff09;STL的版本P.J.版RW版SGI版 STL的组成部分 萌新的学习笔记&#xff0c;写错了恳请斧正。 标准模板库&#xff08;Standard Template Library&#xff09; 标准模板库STL&#xff0c;是C标准库的一个非常重…