文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C 开发人员应遵循的三个显式编程技巧

2024-12-02 08:17

关注

显式编程技巧 #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);

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

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

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯