C规范编辑笔记(十三)

news2024/9/25 13:19:08

往期文章:

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规范编辑笔记分享我们就到这里了,我们第十四篇(最后一篇)见~

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS背景:背景色/背景图像/背景重复/背景附着/简写背景属性(一文搞懂)

目录 CSS背景 CSS 背景色 实例 其他元素 实例 不透明度 / 透明度 实例 使用 RGBA 的透明度 实例 CSS 背景图像 实例 实例 实例 CSS 背景重复 实例 实例 CSS background-repeat: no-repeat 实例 CSS background-position 实例 CSS 背景附着 实例 实例 C…

linux系统中利用QT实现视频监控的基本方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何利用QT实现视频监控的基本操作。 目录 第一&#xff1a;视频监控基本简介 第二&#xff1a;实验流程图 第三&#xff1a;视频监控之服务器 第四&#xff1a;视频监控之客户端实现 第一&#xff1a;视频监控基本简…

Java基础之《netty(30)—RPC调用流程分析》

一、RPC基本介绍 1、RPC&#xff08;Remote Procedure Call&#xff09;—远程过程调用&#xff0c;是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序&#xff0c;而程序无需额外的为这个交互作用编程。 2、两个或多个应用程序都分布在不同的…

Kettle(4):excel数据抽取到mysql

1 准备工作 1.1 准备Excel文件 我这边直接使用上一篇导出的excel:file_user.xls 1.2 创建数据库 在mysql中创建数据库 1.3 在kettle中加载MySQL驱动 Kettle要想连接到MySQL&#xff0c;必须要安装一个MySQL的驱动&#xff0c;就好比我们装完操作系统要安装显卡驱动一样。加…

CMMI之工程类

工程类过程域涵盖了工程学科所共有的开发与维护活动。工程类过程域的书写使用了通用的工程术语&#xff0c;这样&#xff0c;涉及产品开发过程&#xff08;如软件工程、机械工程等&#xff09;的任何技术学科都能够将其用于过程改进。工程类过程域还将不同工程学科的关联过程整…

分享111个ASP源码,总有一款适合您

ASP源码 分享111个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 111个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1Afx8CxZIGwcGWB6aUOssZg?pwdr81w 提取码&#x…

CPU缓存架构缓存一致性协议详解

一、CPU高速缓存&#xff08;Cache Memory&#xff09;1.1 CPU高速缓存CPU缓存即高速缓冲存储器&#xff0c;是位于CPU与主内存间的一种容量较小但速度很高的存储器。由于CPU的速度远高于主内存&#xff0c;CPU直接从内存中存取数据要等待一定时间周期&#xff0c;Cache中保存着…

《你当像鸟飞往你的山》教育让你内心的山更高,更广

《你当像鸟飞往你的山》教育让你内心的山更高&#xff0c;更广 塔拉韦斯特弗&#xff0c;美国作家、历史学家。1986年生于美国爱达荷州的山区。自学考取杨百翰大学&#xff0c;2009年获得剑桥大学哲学硕士学位&#xff0c;2014年获剑桥大学历史学博士学位。2018年出版处女座《你…

2023 年8个ChatGPT 的替代品

OpenAI 于 2022 年 11 月下旬推出的 ChatGPT 在网络世界引起了不小的轰动。它不仅引起了社交媒体用户的关注&#xff0c;也引起了各大媒体的关注。 这种先进的 AI 技术不仅可以根据命令生成、重写和汇总文本&#xff0c;还可以与用户进行交互。它会记住以前的对话&#xff0c;…

[论文翻译] Improving Knowledge Tracing via Pre-training Question Embeddings

摘要 知识追踪 (KT) 定义了根据学生的历史反应预测他们是否能正确回答问题的任务。尽管许多研究致力于利用问题信息&#xff0c;但问题和技能中的大量高级信息尚未被很好地提取&#xff0c;这使得以前的工作难以充分执行。在本文中&#xff0c;我们证明了通过在丰富的边信息上…

通过属性配置文件编写JDBC程序

package com.bjpowernode.jdbc;import java.sql.*; import java.util.ResourceBundle; /* 编程思想&#xff1a;将连接数据库时可变化的4条信息都写到配置文件中&#xff0c;以后需要连接其他数据库的时候&#xff0c;可直接修改配置文件&#xff0c;不用修改java程序。这4个信…

【LeetCode高频100题-3】冲冲冲(持续更新23.1.22)

文章目录62. 不同路径题意解法1 排列组合解法2 动态规划64. 最小路径和题意解法1 DFS&#xff08;剪枝也超时&#xff09;解法2 动态规划62. 不同路径 题意 一道数学题&#xff0c;排列组合/小学奥赛题。动态规划不是一般来解决最值问题的吗&#xff0c;这道题为什么会想到dp…

狂神。JVM入门学习笔记。

JVM学习 JVM常见面试题&#xff1a; 请你谈谈你对jvm的理解&#xff1f;Java8虚拟机和之前的变化更新&#xff1f;什么是OOM&#xff1f;什么是栈溢出StackOverFlowError&#xff1f;怎么分析&#xff1f;jvm的常见调优参数有哪些&#xff1f;内存快照如何抓取&#xff1f;怎么…

【JavaSE】保姆级教程|1万字+10张图学会类与对象--建议收藏

&#x1f331;博主简介&#xff1a;大一计科生&#xff0c;努力学习Java中!热爱写博客~预备程序媛 &#x1f4dc;所属专栏&#xff1a;爪洼岛冒险记【从小白到大佬之路】 ✈往期博文回顾: 【爪洼岛冒险记】第5站&#xff1a;多图解&#xff0c;超详细讲解Java中的数组、二维数组…

weston 1: 编译与运行傻瓜教程

sudo apt-get update sudo apt-get upgrade vim ~/.bashrc export WLD$HOME/install export LD_LIBRARY_PATH$WLD/lib export PKG_CONFIG_PATH$PKG_CONFIG_PATH:/home/zzj/install/lib/x86_64-linux-gnu/pkgconfig/ source ~/.bashrc 配置路径 此处根据个人电脑配置路径 …

高级Spring之BeanFactory的实现

Spring 的发展历史较为悠久&#xff0c;因此很多资料还在讲解它较旧的实现&#xff0c;这里出于怀旧的原因&#xff0c;把它们都列出来&#xff0c;供大家参考 DefaultListableBeanFactory&#xff0c;是 BeanFactory 最重要的实现&#xff0c;像控制反转和依赖注入功能&#x…

十六进制转八进制+超大数据处理(蓝桥杯基础练习C/C++)

目录 1 题目要求 2 代码 2.1 以十进制为媒介&#xff08;不可行&#xff09; 2.2 以二进制为媒介 3 可能会遇到的难点 4 结论 5 延伸 5.1 超大数据阶乘 5.2 超大数据加法 5.3 以十进制为媒介的进制转换 1 题目要求 2 代码 2.1 以十进制为媒介&#xf…

【LeetCode】一文吃透回溯算法(附例题)

回溯 DFS 算法深入浅出&#xff0c;一文吃透&#xff01; 原文同步在&#xff1a;https://github.com/EricPengShuai/Interview/blob/main/algorithm/回溯算法.md 回溯算法 主要参考的是 liweiwei 的总结 0. 概念 回溯法 采用试错的思想&#xff0c;它尝试分步的去解决一个问题…

MATLAB | 如何使用MATLAB绘制韦恩图的高阶版本:upset图

韦恩图随着阶数升高会越来越复杂&#xff0c;当阶数达到7或者以上时几乎没办法绘制&#xff1a; 但是使用upset图却可以比较轻易的绘制&#xff1a; 两种类型图的对应关系&#xff1a; 这期便教大家如何绘制这样的upset图&#xff1a; 教程部分 0 数据准备 数据需要的是0,1矩…

SQL注入现象

package com.bjpowernode.jdbc;import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; import java.util.Scanner; /*** 如果输入的用户名和密码是下面这样的&#xff0c;就会发生非注册人员登录的情况&#xff0c;叫做SQL注入…