阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如果你是C开发人员请看这三个显式编程技巧

269次阅读
没有评论

共计 1481 个字符,预计需要花费 4 分钟才能阅读完成。

导读 嵌入式系统开发人员应尽可能明确,以避免 ASSUME 综合症并在其系统中产生意外行为。在今天的文章中,让我们来看看嵌入式开发人员可以通过更明确的方式清理代码的几个领域。

嵌入式系统开发人员应尽可能明确,以避免 ASSUME 综合症并在其系统中产生意外行为。在今天的文章中,让我们来看看嵌入式开发人员可以通过更明确的方式清理代码的几个领域。

如果你是 C 开发人员请看这三个显式编程技巧

Mix of office supplies and gadgets on a wooden desk background. View from above.

显式编程技巧 #1 – 将 extern 与公共函数一起使用

我们都知道我们不应该使用 extern,因为它会创建全局变量,进而可能导致各种问题。但是,实际使用 extern 的一个好地方是在创建公共函数时。

当你定义一个公开的函数时,你可以使用以下命令在标头中创建声明或原型:

void Foo(void);

它在标题中,所以很明显它是一个公共的外部函数。但是,我遇到过这样的情况,你正在维护一个别人编写的模块,并且在像 Bar 这样的函数的标头中没有公共 API,但它的定义如下:

void Bar(void)
{…}

这个函数的目的是什么?它应该是私有的并且前面有一个静电吗?它应该是公开的并在标题中定义吗?如果嵌入式开发人员将 Bar 定义为:

extern Bar(void)
{…}

我们会知道它是公开的并且在 API 中缺失,尽管有人调用它,链接器仍然能够找到它。

显式编程技巧 #2 – 将指针作为 const 传递给函数,除非它们改变

指针是危险的,如果它们在执行过程中意外地以某种意想不到的方式递增、递减或修改,它们很容易导致灾难。我经常会遇到如下所示的函数声明:

void Foo(uint32_t * Param1);

这个声明是如此含蓄,我读了这个声明,其目的是将一个指针传递给一个 uint32_t,其中指针和指向的 uint32_t 内存位置都允许更改!

这是嵌入式开发人员的本意吗?如果他们只是想传递一个指向变量的指针,以便它通过引用传递并且可以被函数修改怎么办?这个函数可以做到这一点,但他们也打开了修改指针的选项!

下面的陈述对我来说非常清楚,指针不会改变,指向的值可以改变:

void Foo(uint32_t * const Param1);

参数是指向 uint32_t 内存位置的 const 指针。指针在函数中不能改变,但指向的东西可以。因此,如果有人在函数中执行以下操作:

Param++;

编译器会说“不!错误!”,让维护者明白他们不应该这样做。

显式编程技巧 #3 – 将“no reference”变量作为 const 传递

现在,这通常会让嵌入式开发人员兴奋不已,而且不是很好。有人告诉我这是无稽之谈,但同样,它使包括新手在内的任何开发人员都清楚代码。

这里的想法是我可能有一个声明如下的函数:

void Foo(uint32_t Param1);

在这种情况下,我通过副本而不是引用传递参数,以供函数使用。该函数理论上可以对本地副本执行任何操作。但同样,如果有人在维护这段代码,他们是否知道我们想要接收参数并将其用作常量?对我来说,除非声明是这样写的,否则我不会有任何线索:

void Foo(const uint32_t Param1);

这告诉我,该参数预计不会在副本中更改或修改以供本地使用。

这些提示有助于使代码更清晰,并有助于嵌入式开发人员理解代码的真正意图。现在,这些可能不是导致所有这些损失的隐式代码的最佳做法,但它们确实让你认为你应该编写尽可能清晰的软件。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1481字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7801224
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...