编程语言比较:C 和 Go 全球关注
使用一个简单的计数程序比较古老的 C 语言和现代的 Go 语言。
(相关资料图)
Go 是一种现代编程语言,它很大程度上源自于 C 编程语言。因此,对于写 C 程序的程序员来说,Go 应该会感觉很熟悉。Go 让编写新程序变得容易,同时让 C 程序员感觉熟悉,但避免了 C 编程语言的许多常见陷阱。
本文比较了一个简单的 C 和 Go 程序,该程序将数字从一相加到十。由于这个程序只使用了小的数值,所以结果不会变得太大,因此只使用了普通的整数变量。像这样的循环在编程中非常常见,所以这个简单的程序很容易比较 C 和 Go。
如何在 C 中执行循环
C 语言中最基本的循环是for
循环,它允许你对一组值进行迭代。for
循环的基本语法是:
for (起始条件 ; 结束条件 ; 每次迭代后执行的操作) { 循环内要执行的内容 ; }
你可以编写一个for
循环,以打印从 1 到 10 的数字,将起始条件设置为count = 1
,将结束条件设置为count <= 10
。这样就以count
变量等于 1 时开始循环。结束条件意味着只要count
变量小于或等于 10 ,循环就会继续。
每次迭代之后,你使用count = count + 1
将count
变量的值增加 1。在循环内部,你可以使用printf
打印count
变量的值:
for (count = 1; count <= 10; count = count + 1) { printf("%d\n", count);}
C 程序中常见的惯例是++
,它表示 “将某个值加一”。如果你写count++
,那就相当于count = count + 1
。大多数 C 程序员会使用count++
来编写for
循环中每次迭代后要执行的操作,像这样:
for (count = 1; count <= 10; count++) { printf("%d\n", count);}
这是一个示例程序,将从 1 到 10 的数字相加,然后打印结果。使用for
循环对数字进行迭代,但不要打印数字,而是将数字添加到sum
变量中:
#include int main() { int sum; int count; puts("adding 1 to 10 .."); sum = 0; for (count = 1; count <= 10; count++) { sum = sum + count; }
这个程序使用了两个不同的 C 函数来向用户打印结果。puts
函数打印引号中的字符串。如果你需要打印纯文本,使用puts
是个不错的选择。
printf
函数使用特殊字符在格式字符串中打印格式化的输出。printf
函数可以打印许多不同种类的值。关键字%d
打印十进制(整数)值。
如果你编译并运行这个程序,你会看到这个输出:
adding 1 to 10 ..The sum is 55
如何在 Go 中执行循环
Go 提供了与 C 中非常相似的for
循环。C 程序中的for
循环可以直接转换为 Go 的for
循环,并具有相似的表示形式:
for count = 1; count <= 10; count++ { fmt.Printf("%d\n", count)}
使用这个循环,你可以直接转换为 Go 的示例程序:
package mainimport "fmt"func main() { var sum, count int fmt.Println("adding 1 to 10 ..") for count = 1; count <= 10; count++ { sum = sum + count } fmt.Printf("The sum is %d\n", sum)}
虽然上述方式在 Go 中是正确的,但它并不是最常用的 Go写法。采用惯例是“使用与本地语言为人所知的表达方式”。任何语言的目标都是高效的沟通,编程语言也不例外。在不同的编程语言之间进行转换时,重要的是意识到尽管物似而意不同,一种编程语言中的典型写法在另一种编程语言中可能不完全相同。
为使用更符合惯例的 Go,你可以进行几个小修改:
通过使用+=
操作符来将sum = sum + count
更简洁地表达为sum += count
。通过使用分配并推断类型运算符来表达count := 1
而不是var count int
跟着count = 1
。:=
语法同时定义并初始化count
变量。将count
的声明移到for
循环的头中。这减少了一些认知负担,也通过减少程序员在任何时候都必须心里记着的变量数目来提高可读性。这个更改还通过在最接近其使用的地方和最小的范围中声明变量来增加安全性,从而减少了在代码不断演进的过程中对变量进行意外操作的可能性。上述改动的组合将产生以下代码:
package mainimport "fmt"func main() { fmt.Println("adding 1 to 10 ..") var sum int for count := 1; count <= 10; count++ { sum += count } fmt.Printf("The sum is %d\n", sum)}
你可以使用这个 Go.dev 的链接在 Go 试验场中尝试这个示例程序。
C 和 Go 相似但不同
通过在两种编程语言中编写相同的程序,你可以看到 C 和 Go 这两种语言虽然相似但仍然不同。将从 C 转换到 Go 时需要注意以下几点:
在 C 中,每个程序指令都必须以分号结尾。这告诉编译器一个语句在哪里结束,下一个在哪里开始。在 Go 中,分号是有效的,但几乎总是可以推断出来。虽然大多数现代 C 编译器会为你将变量初始化为零值,但 C 语言规范指出,变量得到的是内存中的任意值。Go 值总是初始化为其零值。这有助于使 Go 成为一种更具内存安全的语言。这种差异在使用指针时变得更加有趣。注意 Go 程序包对导入标识符的使用方式。例如,fmt
是一个实现格式化输入和输出的函数,类似于 C 中的stdio.h
中的printf
和scanf
。fmt
程序包在pkg.go.dev/fmt中有文档描述。在 Go 中,main
函数总是以退出代码 0 返回。如果你希望返回其他值,你必须调用os.Exit(n)
,其中n
通常为 1 以表示错误。这可以从任何地方调用,不仅仅是main
函数,来终止程序。你可以在 C 中使用在stdlib.h
中定义的exit(n)
函数来实现相同的效果。
关键词:
下一篇:最后一页
- 编程语言比较:C 和 Go 全球关注
- 涉黄短信精准“筛”男粉,还得从源头打击|即时
- 明冠锂膜CIBF2023电池展圆满收官,落幕不散场
- 【全球新要闻】一身的科技与狠活儿 静态体验保时捷911 GT3 RS(992)
- 吴晓波:联想走出了中国制造企业最具普适意义的一条路 环球快看
- 焦点速讯:多城二手房交易,为何小阳春后又降温
- 2023白玉兰钢琴比赛,烟台赛区,云朵钢琴承办 天天时讯
- 伊藤美诚个人资料_伊藤美诚简介_天天视讯
-
掌上公交怎么查看版本号?掌上公交查看版本号教程
有的小伙伴会问小编掌上公交怎么查看版本号,下面小编就为大家详细的介绍一下,想知道的话就来看看吧,相信
-
印度一新郎婚礼当天反悔逃跑 新娘披婚纱狂追20多公里找到人
海外网5月24日电据印度新德里电视台5月24日报道,近日在印度北方邦巴雷利市的一场婚礼上,新郎抛下新娘临阵
-
巩固制造业升级发展良好态势-短讯
今年前4个月我国制造业投资同比增长64在上年较快增速的基础上继续保持稳定增长从结构上看装备制造业同比增
-
荣泰电工过会:今年IPO过关第118家 东兴证券过2单
荣泰电工过会:今年IPO过关第118家东兴证券过2单
X 关闭
X 关闭