C规范编辑笔记(十三)

往期文章:

C规范编辑笔记(一)
C规范编辑笔记(二)
C规范编辑笔记(三)
C规范编辑笔记(四)
C规范编辑笔记(五)
C规范编辑笔记(六)
C规范编辑笔记(七)
C规范编辑笔记(八)
C规范编辑笔记(九)
C规则编辑笔记(十)
C规范编辑笔记(十一)
C规范编辑笔记(十二)

正文:

今天,我们来更新C规范编辑笔记的第十三篇,可能最近有小伙伴发现我的更新速度变快了,哈哈,最主要是因为这些笔记前期就做好了,只是一直没有在csdn上面写,加上最近放假了,索性就一天更一篇吧,另外我们依然保持每一篇以短内容为主,防止长篇大论造成一定的疲劳。

好了,话不多说,直接来讲~

1、 sizeof 运算符返回的不是对象的大小,而是内存中使用的大小。案例如下:

typedef struct s_example {
    uint32_t ui_field1;
    uint8_t ui_field2;
} t_example;


int32_t isize = sizeof(t_example); /*  对于 32 位对齐,sizeof 返回的值为 8 ,所以sizeof返回的是内存中使用的大小*/

而使用了#pragma pack(push , 1) /* 1 字节对齐 - 非标准 */
isize = sizeof(t_example); /*sizeof 返回的值为 5,因为该结构是使用 1 字节对齐声明的*/

2、 规则 - 建议对内存分配是否成功进行强制验证。比如如下案例:

Bad example:
point_t *p_point;
p_point = (point_t *)malloc(sizeof(point_t));
/* 没有检查函数返回 */
p_point ->x = 0.0f;
p_point ->y = 0.0f;


Good example:

point_t *p_point = NULL;
p_point = (point_T *)malloc(sizeof(point_t));
if (NULL != p_point)  /*这里对p_point是否为空指针做了判断*/
{
    p_point ->x = 0.0f;
    p_point ->y = 0.0f;
} else {
    /* 内存分配没有成功的错误处理 */
}在这里插入代码片

***另外有必要将内存区域与其用途相关联:表示不同值的数据存储在单独的内存空间中。如果共享内存区域被回收,请确保在重新使用之前将其擦除。 一旦程序不再需要访问这些数据,就必须明确删除所有包含敏感数据的内存区域。

3、规则–在执行任何更改其值的标准库函数之前和之后初始化并查看 errno 的值

errno错误代码: 记录系统的最后一次错误代码。
!!! 只有当一个库函数失败时,errno才会被设置。当函数成功运行时,errno的值不会被修改。这意味着我们不能通过测试errno的值来判断是否有错误存在。反之,只有当被调用的函数提示有错误发生时检查errno的值才有意义。

因此,部分库函数会将错误结果存储在error中。具体应用代码对比如下:

Bad example:
#include <stdlib.h>
void try1 (const unsigned char * len)
{
    unsigned long res;
    res = strtoul(len,NULL ,5); /* 将字符串转换为 unsigned long */
    /* 函数 strtoul 写入 errno */
    if (res == ULONG_MAX)
    {
        /* 问题管理 */
    }
    ...
}

Good example:
#include <stdlib.h>
#include <errno.h>
void try1 (const unsigned char * len)
{
    unsigned long res;
    errno = 0; /* init errno */
    res = strtoul(len,NULL ,5); /* 将字符串转换为 unsigned long */
    /* 用 errno 写的 strtoul */
    if (res == ULONG_MAX && errno != 0) /* 错误阅读 */
    {
        /* 问题管理 */
    }
    ...
}

***另外C语言中有专门的错误代码(0-127)来表示不同的错误类型。

好了,第十三篇C规范编辑笔记分享我们就到这里了,我们第十四篇(最后一篇)见~

在这里插入图片描述

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OMGMac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值