编程语言比较:C 和 Go | Linux 中国

2023-05-26 0 400

编程语言比较:C 和 Go | Linux 中国

编者按:采用两个单纯的算数流程较为有名的 C 词汇和当代的 Go 词汇。                       

责任编辑页数:3649,写作时数约: 5两分钟

https://linux.cn/article-15838-1.html

译者:Jim Hall

翻译者:ChatGPT

采用两个单纯的算数流程较为有名的 C 词汇和当代的 Go 词汇。

Go 是一类当代C词汇,它十分大某种程度上源于于 C C词汇。因而,对写 C 流程的流程员而言,Go 如果会觉得很熟识。 opensource.com,与此同时让 C 流程员觉得熟识,但防止了 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 www.redhat.com 采用特殊字符在格式字符串中列印格式化的输出。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 main

import “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 写法。采用惯例是“采用与本地词汇为人所知的表达方式”。任何词汇的目标都是高效的沟通,C词汇也不例外。在不同的C词汇之间展开转换时,重要的是意识到尽管物似而意不同,一类C词汇中的典型写法在另一类C词汇中可能不完全相同。

为采用更符合惯例的 Go,你能展开几个小修改:

◈ 通过采用 += 操作方式符来将 sum = sum + count 更简洁地表达为 sum += count。

◈ 通过采用 go.dev 来表达 count := 1 而不是 var count int 跟着 count = 1。 := 句法与此同时定义并初始化 count 表达式。

◈ 将 count 的声明移到 for 循环式的头中。这减少了一些认知负担,也通过减少流程员在任何时候都必须心里记着的表达式数目来提高可读性。那个更改还通过在最接近其采用的地方和最小的范围中声明表达式来增加安全性,从而减少了在代码不断演进的过程中对表达式展开意外操作方式的可能性。

上述改动的组合将产生以下代码:

package main

import “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.dev 在 Go 试验场中尝试那个示例流程。

C 和 Go 相似但不同

通过在两种C词汇中撰写相同的流程,你能看到 C 和 Go 这两种词汇虽然相似但仍然不同。将从 C 转换到 Go 时需要注意以下几点:

◈ 在 C 中,每个流程指令都必须以分号结尾。这告诉编译器两个语句在哪里完结,下两个在哪里已经开始。在 Go 中,分号是有效的,但几乎总是能推断出来。

◈ 虽然大多数当代 C 编译器会为你将表达式初始化为零值,但 C 词汇规范指出,表达式得到的是内存中的任意值。Go 值总是初始化为其零值。这有助于使 Go 成为一类更具内存安全的词汇。这种差异在采用指针时显得更加有趣。

◈ 注意 Go 流程包对导入标识符的采用方式。例如, fmt 是两个实现格式化输入和输出的函数,类似于 C 中的 stdio.h 中的 printf 和 scanf。 fmt 流程包在 pkg.go.dev 中有文档描述。

◈ 在 Go 中, main 函数总是以退出代码 0 返回。如果你希望返回其他值,你必须调用 os.Exit(n),其中 n 通常为 1 以表示错误。这能从任何地方调用,不仅仅是 main 函数,来终止流程。你能在 C 中采用在 stdlib.h 中定义的 exit(n) 函数来实现相同的效果。

(题图:MJ/8f731484-2dc3-4bac-b895-cbc92a63b48b)

via:

译者: 选题: 翻译者:ChatGPT 校对:

责任编辑由 原创编译, 荣誉推出

欢迎遵照 CC-BY-SA 协议规定转载,

我们将为您添加白名单,授权“ 转载文章时能修改”。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务