Redian新闻
>
编程语言比较:C 和 Go | Linux 中国

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

科技
 
导读:使用一个简单的计数程序比较古老的 C 语言和现代的 Go 语言。                       
本文字数:3649,阅读时长大约:5分钟

https://linux.cn/article-15838-1.html
作者:Jim Hall
译者:ChatGPT

使用一个简单的计数程序比较古老的 C 语言和现代的 Go 语言。

Go 是一种现代编程语言,它很大程度上源自于 C 编程语言。因此,对于写 C 程序的程序员来说,Go 应该会感觉很熟悉。Go 让编写新程序变得容易🔗 opensource.com,同时让 C 程序员感觉熟悉,但避免了 C 编程语言的许多常见陷阱。

本文比较了一个简单的 C 和 Go 程序,该程序将数字从一相加到十。由于这个程序只使用了小的数值,所以结果不会变得太大,因此只使用了普通的整数变量。像这样的循环在编程中非常常见,所以这个简单的程序很容易比较 C 和 Go。

如何在 C 中执行循环

C 语言中最基本的循环是 for 循环,它允许你对一组值进行迭代。for 循环的基本语法是:

  1. for (起始条件 ; 结束条件 ; 每次迭代后执行的操作) { 循环内要执行的内容 ; }

你可以编写一个 for 循环,以打印从 1 到 10 的数字,将起始条件设置为 count = 1,将结束条件设置为 count <= 10。这样就以 count 变量等于 1 时开始循环。结束条件意味着只要 count 变量小于或等于 10 ,循环就会继续。

每次迭代之后,你使用 count = count + 1 将 count 变量的值增加 1。在循环内部,你可以使用 printf 打印 count 变量的值:

  1. for (count = 1; count <= 10; count = count + 1) {
  2. printf("%d\n", count);
  3. }

C 程序中常见的惯例是 ++,它表示 “将某个值加一”。如果你写 count++,那就相当于 count = count + 1。大多数 C 程序员会使用 count++ 来编写 for 循环中每次迭代后要执行的操作,像这样:

  1. for (count = 1; count <= 10; count++) {
  2. printf("%d\n", count);
  3. }

这是一个示例程序,将从 1 到 10 的数字相加,然后打印结果。使用 for 循环对数字进行迭代,但不要打印数字,而是将数字添加到 sum 变量中:

  1. #include <stdio.h>
  2. int main() {
  3. int sum;
  4. int count;
  5. puts("adding 1 to 10 ..");
  6. sum = 0;
  7. for (count = 1; count <= 10; count++) {
  8. sum = sum + count;
  9. }

这个程序使用了两个不同的 C 函数来向用户打印结果。puts 函数打印引号中的字符串。如果你需要打印纯文本,使用 puts 是个不错的选择。

printf 函数🔗 www.redhat.com 使用特殊字符在格式字符串中打印格式化的输出。printf 函数可以打印许多不同种类的值。关键字 %d 打印十进制(整数)值。

如果你编译并运行这个程序,你会看到这个输出:

  1. adding 1 to 10 ..
  2. The sum is 55

如何在 Go 中执行循环

Go 提供了与 C 中非常相似的 for 循环。C 程序中的 for 循环可以直接转换为 Go 的 for 循环,并具有相似的表示形式:

  1. for count = 1; count <= 10; count++ {
  2. fmt.Printf("%d\n", count)
  3. }

使用这个循环,你可以直接转换为 Go 的示例程序:

  1. package main
  2. import "fmt"
  3. func main() {
  4. var sum, count int
  5. fmt.Println("adding 1 to 10 ..")
  6. for count = 1; count <= 10; count++ {
  7. sum = sum + count
  8. }
  9. fmt.Printf("The sum is %d\n", sum)
  10. }

虽然上述方式在 Go 中是正确的,但它并不是最常用的 Go 写法。采用惯例是“使用与本地语言为人所知的表达方式”。任何语言的目标都是高效的沟通,编程语言也不例外。在不同的编程语言之间进行转换时,重要的是意识到尽管物似而意不同,一种编程语言中的典型写法在另一种编程语言中可能不完全相同。

为使用更符合惯例的 Go,你可以进行几个小修改:

◈ 通过使用 += 操作符来将 sum = sum + count 更简洁地表达为 sum += count
◈ 通过使用 分配并推断类型运算符🔗 go.dev 来表达 count := 1 而不是 var count int 跟着 count = 1:= 语法同时定义并初始化 count 变量。
◈ 将 count 的声明移到 for 循环的头中。这减少了一些认知负担,也通过减少程序员在任何时候都必须心里记着的变量数目来提高可读性。这个更改还通过在最接近其使用的地方和最小的范围中声明变量来增加安全性,从而减少了在代码不断演进的过程中对变量进行意外操作的可能性。

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

  1. package main
  2. import "fmt"
  3. func main() {
  4. fmt.Println("adding 1 to 10 ..")
  5. var sum int
  6. for count := 1; count <= 10; count++ {
  7. sum += count
  8. }
  9. fmt.Printf("The sum is %d\n", sum)
  10. }

你可以使用这个 Go.dev 的 链接🔗 go.dev 在 Go 试验场中尝试这个示例程序。

C 和 Go 相似但不同

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

◈ 在 C 中,每个程序指令都必须以分号结尾。这告诉编译器一个语句在哪里结束,下一个在哪里开始。在 Go 中,分号是有效的,但几乎总是可以推断出来。
◈ 虽然大多数现代 C 编译器会为你将变量初始化为零值,但 C 语言规范指出,变量得到的是内存中的任意值。Go 值总是初始化为其零值。这有助于使 Go 成为一种更具内存安全的语言。这种差异在使用指针时变得更加有趣。
◈ 注意 Go 程序包对导入标识符的使用方式。例如,fmt 是一个实现格式化输入和输出的函数,类似于 C 中的 stdio.h 中的 printf 和 scanffmt 程序包在 pkg.go.dev/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: https://opensource.com/article/23/4/c-vs-go-programming-languages

作者:Jim Hall 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
BASIC 与 FORTRAN 77:比较过去的编程语言 | Linux 中国畅谈百年编程语言TUXEDO Stellaris 16(Gen5)是目前所能找到的终极 Linux 笔记本电脑 | Linux 中国Wing:人工智能时代的云开发编程语言你的第一门编程语言是什么? | Linux 中国遥思龙泉桃花宴又一个中文编程语言发布:青语言终身仁慈独裁者、Python 之父龟叔,曾被认为最不可能发明自己的编程语言又见桐花开最赚钱编程语言Zig登顶,开发者爱ChatGPT远超必应|Stack Overflow报告如何在 Rocky Linux 9 / AlmaLinux 9 上安装 KVM | Linux 中国新开源!跨时代AI编程语言NGPTL++支持80+编程语言!集成VSCode,HuggingFace代码大模型来了开源 Java 性能分析器比较:VisualVM、JMC 和 async-profiler贼喊捉贼式的新疆指控,让人出离愤怒Epic CEO:元宇宙已达6亿用户,元宇宙编程语言Verse意义何在?冷却的不止季节(41)— 丧葬费正在诞生的五种编程语言百度推出AI编程助手 "Comate":覆盖30多种编程语言我和聊天机器人(AI)对话全球超过3200万孩子都在玩的编程游戏,用“闯关”教真实的编程语言【广发策略 | 数据说】行业比较:从“估值填坑”迈向“确定性溢价”2023 最好就业的 8 门编程语言出炉!直连Colab,支持20种编程语言:谷歌版ChatGPT代码水平反杀了?终身仁慈独裁者、Python之父龟叔,曾被认为最不可能发明自己的编程语言支持80+编程语言、集成VSCode,HuggingFace代码大模型来了它就是比尔盖茨和 Linux 之父同时推崇的编程语言!今晚截团!全球超过3200万孩子都在玩的编程游戏,用“闯关”教真实的编程语言多编程语言代码生成神器 CodeGeeX,编码效率提升十倍!Mojo:比 Python 快 35000 倍的编程语言比Python快35000倍!LLVM&Swift之父宣布全新编程语言Mojo:编程被颠覆了LLVM&Swift之父宣布全新AI开发编程语言"Mojo",兼容Python,且快35000倍中文编程语言——青语言开源发布百度智能云推出代码助手 Comate,覆盖 30 种编程语言,正式开放邀测一次电梯故障,“逼得”这个程序员在 29 岁时写出了一种编程语言
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。