尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

三种风格函数在项目中使用情况,以及风格2函数是否可以检查参数合法性。

发布时间:2026/9/29 22:13:32

资讯中心
01
ARTICLE

三种风格函数在项目中使用情况,以及风格2函数是否可以检查参数合法性。

三种风格函数在项目中使用情况,以及风格2函数是否可以检查参数合法性。
在文章“嵌入式编程:详解c语言函数编写的三种并列风格”中提到以返回值不同进行划分可以将函数分成三种风格风格1返回值为void类型风格2返回值为函数运行的结果风格3返回值为错误状态旗标文章中对三种风格函数进行了详细说明在这里就不再复述了今天主要讲解三种风格在整个项目中的使用情况以及对某些特殊情况进行说明。我查看了Uboot源码程序、freeRTOS源码、stm32 HAL库、以及我同事编写的项目从中可以得出结论整个项目中风格1、风格3编写的函数占最头可能这两种风格的函数能够占95%以上其中风格1编写的函数又占大头风格2编写的函数也就是返回值为“函数运算结果”的函数只占5%甚至更低。所以在编写项目程序的时候我们也要求按照这种比例关系编写函数风格2的函数返回值为函数运行结果尽量少使用。风格2函数是否可以检查参数合法性也就是返回值为函数运行结果是否有办法还能检查参数是否合法呢我查看了uboot内核源码、HAL库、freeRTOS源码、以及我同事以前写的代码发现上述风格2编写的代码占非常少一部分基本没有。毕竟如果以这种方式返回值有2种功能既要返回函数运行结果又要返回能够返回错误状态旗标码也就是有两种功能非常不合理。因此基本可以得出这样的结论返回值为函数运行结果的函数无法或者没有必要检测参数的合法性。如果需要检测参数合法性那就需要使用方式3编写的函数。如下所示。uint8_t flash_read_byte(uint32_t abs_addr_start, uint8_t *data) { if (abs_addr_startFLASH_START_ADDR || (abs_addr_startFLASH_BYTE_SIZE)FLASH_END_ADDR) { return UT_ERROR; } *data *(__IO uint8_t *)abs_addr_start; return UT_OK; }我也十分不推荐返回值既要是函数运行结果又要是错误状态码这样写出的函数可读性非常差如果以方式2编写返回值为函数运行结果那就去掉参数检查参数不检查如下所示uint8_t flash_read_byte(uint32_t abs_addr_start) { return *(__IO uint8_t *)abs_addr_start; }延伸结构体类型定义的一个类比关系结构体类型定义就相当于一个用于“打包物品的纸箱子”里面有很多不同的格子每一个格子存储不同的变量。将不同物品用一个纸箱子进行打包运输拆包的过程的目的或者好处有很多例如安全、集中、方便、省钱、一次性能传输多个效率高对应的使用结构体类型定义对成员变量进行打包好处也有多个例如安全无法直接访问内部成员必须要通过结构体变量名或者结构体变量的指针变量进行访问而且不同结构体类型内部成员支持重名、集中内存上相邻排布、方便不用自己计算偏移量访问内部成员变量都是统一从结构体起始地址开始、省钱不用通过每一个成员变量名这样就需要记住多个或者对应指针变量对内部变量进行读写访问直接通过结构体变量名偏移量或者结构体变量指针变量偏移量的方式实现对内部成员的访问、高效支持一次传递多个内部成员例如函数传参的时候传递结构体指针来在函数体内部访问多个内部成员。以前结构体变量名访问内部成员和结构体指针变量访问内部成员我也做了一个不是很恰当的类型结构体变量名访问内部成员银行内部私有账户结构体指针变量访问内部成员银行外来人员使用自己的银行卡或者存折访问自己账户中的钱。定义结构体类型也带来了一个负面影响也就是每次访问内部成员都要先通过结构体变量名或者结构体指针变量名就像是包裹打包或者拆卸包裹获取里面的东西第一步都要通过外面的箱子不通过外面的箱子是无法动里面的东西的。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。