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.mzph.cn/pingmian/53629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于前端知识中框架概念部分的详细介绍

1、为什么要学习流行框架? 企业:为了提高效率,因为时间就是金钱。开发人员:提高了开发效率发展进程: JS>JQuery>模板引擎>框架时代(Angular(2)、React、Vue)好处:不用直接…

揭秘蛇形机器人的主动SLAM算法和障碍物避让策略

更多优质内容,请关注公众号:智驾机器人技术前线 1.论文信息 论文标题:An active SLAM with multi-sensor fusion for snake robots based on deep reinforcement learning 作者:Xin Liu, Shuhuan Wen, Yaohua Hu, Fei Han, Hong…

文件IO编程

文章目录 文件描述符相关系统调用文件有关的系统调用文件操作函数--creat函数文件操作函数--open函数文件操作函数--read函数文件操作函数--write函数文件操作函数--close函数文件操作函数--lseek函数缓冲区的大小对性能的影响 实验:调用系统函数,实现文…

STM32 WDG看门狗

在大型项目中,BUG根本无法避免,因为可能的状态太多了,总有那么意想不到的情况发生, 所以,对于程序员,第一要要丰富的经验,避免一些常见的bug, 第二,程序要经常迭代&#…

集成学习(Ensembling Learning)

0. 来源 概念比较全,可以作为目录,前置知识讲得好,其他一般。 01.内容简介_哔哩哔哩_bilibili01.内容简介是集成学习:XGBoost, lightGBM的第1集视频,该合集共计19集,视频收藏或关注UP主,及时了…

【数据结构】排序算法系列——序言(附源码+图解)

作为基础算法的中流砥柱部分,排序算法一直都是计算机学习者们不可忽略的一部分。而其中的算法思想也蕴含着许多在今后的算法学习甚至是整个计算机技术的学习之中仍然熠熠生辉的算法思想,它们引领着我们不断探索算法的奥秘之处。所以,学习排序…

简单聊聊bait文件

场景:业务同事发现某云主机部署了企业主机安全,在该主机上发现了一个诱饵文件,显示注意:此文件是诱饵文件,用于防止重要文件被病毒加密。请勿修改或删除此文件。 解决方法:联系企业主机安全运维同事发现&am…

信号保存和处理

把上一篇回顾一下吧:共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,进程不再通过执行进入内核的系统调用来传递彼此的数据 共享内存的数据结构: struct shmid_ds {…

QT实现TCP/UDP通信

服务器端&#xff1a; 客户端&#xff1a; 服务器&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QTcpSocket> #include <QList> #include <QMessageBox> #include <QDebug&…

point transformer v3复现及核心代码详解

point transformer v3复现及核心代码详解 1. 复现1.1 复现1.2 数据预处理1.3 跑通 2. 核心代码详解2.1 读取数据2.2 dataloder2.3 模型读取数据的逻辑2.4 forward2.4.1 Point2.4.2 backbone2.4.2.1 point.serialization2.4.2.2 稀疏化2.4.2.3 embedding2.4.2.4 encoder 1. 复现…

Emlog程序屏蔽用户IP拉黑名单插件

插件介绍 在很多时候我们需要得到用户的真实IP地址&#xff0c;例如&#xff0c;日志记录&#xff0c;地理定位&#xff0c;将用户信息&#xff0c;网站数据分析等,其实获取IP地址很简单&#xff0c;感兴趣的可以参考一下。 今天给大家带来舍力写的emlog插件&#xff1a;屏蔽…

wakenet尾迹

1、数据集介绍SWIM_Dataset_1.0.0 1.1标注文件介绍 标注文件介绍&#xff0c; 第一种&#xff1a;角度和框的坐标 <annotation><folder>Positive</folder><filename>00001</filename>文件名字<format>jpg</format>图片后缀<s…

自掘坟墓?开源正在卷爆程序员!

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer Hello&#xff0c;大家好&#xff0c;我是 Sunday。 今天这篇文章其实我想了好久&#xff0c;因为这并不是一个 和光同尘 的话题&#xff0c;它…

第143天:内网安全-权限维持自启动映像劫持粘滞键辅助屏保后门WinLogon

案例一&#xff1a; 权限维持-域环境&单机版-自启动 自启动路径加载 路径地址 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\ ##英文C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动\ ##中文…

OpenHarmony鸿蒙( Beta5.0)智能窗户通风设备开发详解

鸿蒙开发往期必看&#xff1a; 一分钟了解”纯血版&#xff01;鸿蒙HarmonyOS Next应用开发&#xff01; “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…

如何逆转Instagram账号流量减少?实用技巧分享

Instagram作为全球十大社媒之一&#xff0c;不仅是个人分享生活的平台&#xff0c;还是跨境卖家进行宣传推广和客户开发的关键工具。在运营Instagram的过程中&#xff0c;稍有不慎就容易出现账号被限流的情况&#xff0c;对于账号状态和运营工作的进行都十分不利。 一、如何判断…

isis与ospf高级属性

文章目录 前言一、基础配置(配置各设备的IP地址)二、配置各设备的ospf与isis三、检查ospf与isis邻居是否建立成功1.实现快速重路由2.流量过滤方法3.引入默认路由4.配置等价路由 前言 在下面实验中&#xff0c;蓝色区域运行ospf&#xff0c;为了控制ospf的lsdb数量&#xff0c;…

vue页面使用自定义字体

一、准备好字体文件 一般字体问价格式为 .tff&#xff0c;可以去包图网等等网站去下载&#xff0c;好看的太多了&#xff01;&#xff01;&#xff01; 下载下来就是单个的 .tff文件&#xff0c;下载下来后可以进行重命名&#xff0c;但是不要改变他的后缀名&#xff0c;我把他…

【c++】类和对象详解

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 来都来了! 点个赞给博主个支持再走吧~&#xff01; 一.类的定义 &#xff08;1&#xff09;类定义格式 class为类定义的关键字&#xff0c;定义一个类格式如下: class 类名{//代码…

turtle.circle() 函数绘制弧形规律助记图 ← Python

【Python 之 turtle.circle() 函数定义】 定义&#xff1a;turtle.circle(radius, extent)作用&#xff1a;根据半径 radius 绘制 extent 角度的弧形参数&#xff1a;radius &#xff1a;弧形半径当 radius 值为正数时&#xff0c;圆心在当前位置/小海龟左侧。当 radius 值为负…