网易首页 > 网易号 > 正文 申请入驻

先学Rust再学C,我遇到的一些意外细节

0
分享至

我最早学的系统编程语言是Rust。和很多程序员相比,这不太常见——更常见的情况是先学C或C++,再来学Rust。因此网上有大量"给C程序员的Rust指南",反过来讲C的文章却少得可怜。

我最近在自学C和C++,被这门语言的古怪之处震到了。这篇不是C语言教程,而是一份清单——记录我在学C过程中遇到的、最让人意外的几个细节。(今天不涉及C++,我还没准备好碰那堆麻烦。)


布尔类型不是原生就有的

最早的C根本没有布尔类型,程序里用整数0和1代替。直到C99,才通过可选的头文件引入布尔。但即便如此,true和false也不是字面量或关键字,它们只是展开成1和0的宏定义:

  • #define true 1
  • #define false 0

到了C23,布尔才真正成为语言原语。但如果你编译的是更早的版本,还是得手动引入。

字符串靠空字节收尾,不是靠长度

Rust的&str占16字节:8字节存内存地址,8字节存字符串长度。因为str是动态大小类型,靠指针元数据来追踪长度。这样取字符串长度极快,但每个&str引用要多占内存。

C走的是另一条路:它不单独存字符串长度,而是用空字节\0给每个字符串收尾。这是一个有意的取舍,带来几个后果:

  1. C程序不需要在字符串旁边额外维护一个size变量
  2. 每个字符串末尾都要留出空字节的位置
  3. 空字符串""也要占一个字节的内存
  4. 空字节很难直接用在字符串中间,否则会搞乱里的函数
  5. 忘记加空终止符,就可能导致越界读取

实际写代码时,你得记得为空终止符多分配空间,并在字符串末尾补上它。比如一个反转字符串的C函数,要专门处理两处:分配时用malloc(len + 1),循环结束后写reversed[len] = '\0'。对应的Rust版本则完全不用操这份心。

整数宽度取决于目标平台

C的整数类型不保证用固定的位数,宽度随目标平台变化。long在Unix上是64位,在Windows上却是32位,这一点尤其让人别扭。我一位朋友几年前给过建议:如果你在意跨平台兼容性,就只用提供的固定宽度整数。

错误处理是真的糟

我很喜欢Rust的错误处理。Result逼着你面对错误,和类型(enum)加match语句让处理变得很轻松。相比之下,C的错误处理堪称悲剧。它基本靠函数返回一个"魔法整数"(比如-1)或空指针来暗示出错了。你可以读errno——一个线程局部的整数,用来检查具体错误类型——但想拿到真正的错误信息和调用栈,就难得多。

写C时最明显的一点是:语言永远不会强迫你处理错误,全靠你自己记得函数可能失败。比如malloc()可能失败并返回空指针,新手未必立刻意识到。如果机器内存耗尽,访问reversed[i]就会触发段错误。要避免这种没用的崩溃,程序应该检查空指针,发现后优雅退出:

  • char* reversed = malloc(len + 1);
  • if (reversed == NULL) {
  • perror("Error");
  • exit(1);

这样比直接段错误体验好得多。当然,记得检查每一个分配出来的指针,并不是什么愉快的开发体验。我还试过用带标签的联合体在C里复刻Rust的Result,但用起来一团糟,而且仍然拦不住你不处理错误就直接访问里面的指针。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“你该继续贫困!”女生每天一杯瑞幸被举报,公务员都没这么奢侈

“你该继续贫困!”女生每天一杯瑞幸被举报,公务员都没这么奢侈

番外行
2026-10-05 20:54:27
坚决不许回国!中国3名运动员夺冠后,不承认是国人,下场太解气

坚决不许回国!中国3名运动员夺冠后,不承认是国人,下场太解气

刘哥谈体育
2026-10-08 05:06:24
大闹航班的欧皓辰后续来了,企业至今不敢认领,背后原因太现实

大闹航班的欧皓辰后续来了,企业至今不敢认领,背后原因太现实

削桐作琴
2026-10-07 18:24:14
鼠疫研究机构员工死亡,世卫组织敦促俄罗斯披露更多信息

鼠疫研究机构员工死亡,世卫组织敦促俄罗斯披露更多信息

界面新闻
2026-10-08 09:15:46
人社部财政部正式公布2026年退休人员工资调整方案!

人社部财政部正式公布2026年退休人员工资调整方案!

逍遥论经
2026-10-08 09:57:48
彭玉去世,享年93岁,曾主演《东北一家人》

彭玉去世,享年93岁,曾主演《东北一家人》

韩小娱
2026-10-08 11:41:31
加时惜败!自由人98-101不敌梦想总比分0-2,韩旭出战0分,轮换困境凸显

加时惜败!自由人98-101不敌梦想总比分0-2,韩旭出战0分,轮换困境凸显

小兰看体育
2026-10-08 10:06:41
媒体报道了白俄女歌手被摘除活体器官,但更多的受害者是无声的。

媒体报道了白俄女歌手被摘除活体器官,但更多的受害者是无声的。

吴女士
2026-10-07 21:15:24
曾夺走 2 亿人生命的鼠疫再敲警钟,俄罗斯实验室鼠疫事件的 4 重警示

曾夺走 2 亿人生命的鼠疫再敲警钟,俄罗斯实验室鼠疫事件的 4 重警示

怪味历史连连看
2026-10-07 15:47:32
杨兰兰再现“江湖”!英媒再度将目光投向澳洲劳斯莱斯撞车事件的当事人杨兰兰,不少隐秘细节接连被挖掘出来,这名女子的背景着实不一般

杨兰兰再现“江湖”!英媒再度将目光投向澳洲劳斯莱斯撞车事件的当事人杨兰兰,不少隐秘细节接连被挖掘出来,这名女子的背景着实不一般

火山詩话
2026-10-08 07:19:18
难以置信!网传山东考生620分考入哈工程自动化,国庆毅然返乡复读,宿舍床位已全部清空

难以置信!网传山东考生620分考入哈工程自动化,国庆毅然返乡复读,宿舍床位已全部清空

火山詩话
2026-10-08 08:30:15
“收人四礼,家败人亡”:不管你多穷,这4种礼,千万别收

“收人四礼,家败人亡”:不管你多穷,这4种礼,千万别收

智慧生活笔记
2026-10-07 11:04:05
双向奔赴?祁连县大批游客免费住学生宿舍:文旅未经学生同意,擅自安排,评论两边倒,引发大众争议

双向奔赴?祁连县大批游客免费住学生宿舍:文旅未经学生同意,擅自安排,评论两边倒,引发大众争议

李晚书
2026-10-08 08:16:55
地雷风波升级,金与正发声:野兽都不能进进出出

地雷风波升级,金与正发声:野兽都不能进进出出

中国新闻周刊
2026-10-07 16:43:44
“宝马”停在小区泊位被撞,对方在车上留下纸条,除了车损,车主还希望赔偿“替代性交通费”“通讯费”

“宝马”停在小区泊位被撞,对方在车上留下纸条,除了车损,车主还希望赔偿“替代性交通费”“通讯费”

大风新闻
2026-10-08 10:13:07
上甘岭坑道最禁忌的一夜:17岁女卫生员用嘴吸出战友尿液,秦基伟回忆录曝光真相

上甘岭坑道最禁忌的一夜:17岁女卫生员用嘴吸出战友尿液,秦基伟回忆录曝光真相

纪史行者
2026-10-08 05:10:03
俄媒:俄鼠疫感染区医院暴发瘟疫,出现第二例死亡病例

俄媒:俄鼠疫感染区医院暴发瘟疫,出现第二例死亡病例

阿尔卑斯瞭望
2026-10-07 14:05:52
冲击6大目标!郑钦文vs斯维托丽娜,CCTV5直播,一隐患或成胜负手

冲击6大目标!郑钦文vs斯维托丽娜,CCTV5直播,一隐患或成胜负手

大秦壁虎白话体育
2026-10-08 07:45:11
欠薪2300万元!估值140亿的机器人巨头,如今连工资都发不出来了

欠薪2300万元!估值140亿的机器人巨头,如今连工资都发不出来了

李砍柴
2026-10-07 18:56:23
中锋危机!纳斯:暂无引援计划,詹姆斯或客串中锋

中锋危机!纳斯:暂无引援计划,詹姆斯或客串中锋

体坛周报
2026-10-08 09:48:20
2026-10-08 12:04:49
碳基打工人
碳基打工人
坐标北京,靠咖啡续命,靠小红书下饭的普通人类。
128文章数 87关注度
往期回顾 全部

科技要闻

微软新Surface来了,2599美元起

头条要闻

鼠疫研究机构员工死亡 世卫组织敦促俄方披露更多信息

头条要闻

鼠疫研究机构员工死亡 世卫组织敦促俄方披露更多信息

体育要闻

从骑马舞到开口全中文 德约在北京不止七冠

娱乐要闻

给吴奇隆点赞的同时,再看蔡康永事件

财经要闻

美联储会议纪要:年内或将再上调利率一次

汽车要闻

智能化再提升 2027款东风标致、东风雪铁龙新车更人性化了

态度原创

艺术
家居
房产
手机
亲子

艺术要闻

在写生中倾听大自然的声音

家居要闻

2026建博会(广州) 公装联探展交流活动

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

手机要闻

国产屏幕迎来里程碑!维信诺 2K+185Hz 屏幕量产,10 月新机直接搭载

亲子要闻

看起来没出息,实际上很高级的当妈方式!

无障碍浏览 进入关怀版