
C
文章平均质量分 50
grey_csdn
这个作者很懒,什么都没留下…
展开
-
1787_函数指针的使用
先前实现过一个归并排序算法,算法函数的一个传入参数是指向一个比较功能函数的指针。当时进行代码实现的时候这部分有点糊涂,写了一段糊涂代码居然最后运行出了结果。那么在使用归并排序函数之前,我可以先进行一个函数指针的定义,并且让此函数指针指向我需要的比较函数。这样,我就可以直接通过CMP_PROC_pt数据类型定义或者声明一个指向比较函数的指针。这次比上次的代码清爽的多,而且编译一而没有任何警告灯扎眼的信息。原创 2023-09-19 18:37:30 · 56 阅读 · 0 评论 -
1784_C语言实现常用的复数运算
这是最近学习的C语言数据结构的中的案例,但是没有给出具体的实现代码。根据自己的学习水平简单编写了一下,倒是能够计算与输出,但是不知道还有没有什么缺陷。原创 2023-09-19 18:25:16 · 34 阅读 · 0 评论 -
1781_通用型归并排序函数的C语言实现
关于排序算法,书中只讲了三种:冒泡排序、选择排序和归并排序。前两个的实现其实还是比较简单的,第三个涉及到递归的算法有时候理解起来会稍微麻烦一些。但是一旦理解了似乎又觉得是豁然开朗,一切清晰简单。近期在学习C语言数据结构,看到了排序。我看得是一本国外的书籍,直接网上寻找到的一个英文版。使用中,借用了部分之前的代码,实现起来比较简单,因此这里只展示核心的排序算法代码以及测试的Test Case。一直没有写过归并排序的算法,今天用C语言实现了一个简单的通用版本。测试代码中只测试了一个简单的case。原创 2023-09-03 09:50:04 · 107 阅读 · 0 评论 -
1760_C语言中选择排序的实现
选择排序的实现思想跟冒泡排序的思想非常相近,二者的差一点在于:冒泡排序在比较交换的过程中交换的是两个位置的数据,而选择排序则是在遍历比较的过程中寻找最小数值的index值。如果在遍历比较的过程中,发现最小值的Index值跟第一轮循环的Index值不同,进行数据的交换。在选择排序的内循环中,其实并没有发生数据的交换,而是作为临时变量的index值得变化。程序的运行结果正常。原创 2023-07-04 19:34:16 · 152 阅读 · 0 评论 -
1759_C语言中冒泡排序的实现以及新编译环境测试
冒泡排序是把一个序列分为已经排序的和没有排序的两部分,左侧的数据作为排好序的部分,右侧的为未排序部分。从最左边的一个数据开始作为比较对象,依次遍历比较右边的数据。如果右边的数据比左边的小,那么两者交换位置。完成右边的便利比较之后,左侧的数据成为已经排好序的部分。接下来,进行第二个数据的排序。最近在重新学习C语言的数据结构,找了一份国外的电子书一点点看。刚刚学完双向链表,接下来的任务是搞定几个常用的排序。冒泡排序还算是我比较熟悉的,工作之后遇到的排序功能我基本上都是首选这个算法进行排序功能的实现。原创 2023-07-03 20:55:26 · 221 阅读 · 0 评论 -
1758_C语言通过预处理的eror输出异常信息
这就是我想要的效果,而出现这种现象的原因则是因为CONFIG_PAR宏定义缺失。通过这个例子可以看出,预处理的条件判断功能有着类似于脚本语言的特性。相应的信息或者语句的处理发生在编译的过程中而不是编译之后再程序中依然存在相应的分支判断。而error功能则可以终止错误的编译并且输出相应的提示。最近想处理一个可以适配多种情况的程序,想用一个工程编译出不同需求的软件,而我需要做的仅仅是修改配置文件中的参数。而我还希望当配置参数写的不正确的时候能够终止编译并给我提示,折让省去我很多麻烦并节省时间。原创 2023-07-02 19:54:10 · 161 阅读 · 0 评论 -
1757_C语言实现复数数据结构及其加法运算
关于main函数中的测试代码,最初的尝试是类似加法函数中的方式,先分配内存然后进行数据空间的操作。最终也实现了正常的输出,但是计算的时间慢的异常。底子不牢,暂时没有想出是什么原因。上面的代码经过简单的编译运行,计算出了我想要的结果而且没有先前采用指针运算的那种很明显的慢速现象出现。在看一本C语言数据结构与算法书籍,感觉跟我现在工作(嵌入式)的差异好大。很多东西工作了这么多年都没有用到过,但是又觉得这实在是不该不会。原创 2023-07-01 22:38:37 · 435 阅读 · 0 评论 -
1756_C语言strcmp函数
嵌入式的世界呆的太久了,似乎早就忘记了曾经在电脑上做各种程序编码学习的经历。这似乎也多少有点体现出了嵌入式C语言的特点,跟电脑上常用的软件编写确实是有一定的差异。特别是汽车电子的嵌入式,更加侧重于逻辑的实现而没有各种字符串以及界面的考虑。其中输入的两个参数为两个字符串,比较的原则则是按照ASCII码表的先后来做相应的判断。最近学习中遇到了字符串比较功能,找了一下需要使用strcmp函数。凭个人的直觉来看,肯定是输入两个字符串的参数返回一个比较结果,但是具体的用法我确实是说不出来的。原创 2023-06-30 07:40:41 · 109 阅读 · 0 评论 -
1755_C语言memcpy的使用
功能是从src向desti拷贝一个n个字节的内容,返回的值为一个指向desti的指针。这基本上是我对于这个函数的所有了解。不过,有了这些信息基本上就可以实现我想要的一个比较通用的数组拷贝功能了。想实现一个通用一点的数组拷贝功能,看了一下可以使用memcpy。对这个功能的了解还是比较肤浅,但是现在看来应该是能够以此来实现我想要的功能。原创 2023-06-30 07:38:29 · 73 阅读 · 0 评论 -
1754_C语言assert函数功能初探
我调试的时候使用的系统平台为Windows10 HB,编译成功,运行的时候给出了表达式为0的提示并且终止了程序。如果这个表达式的计算值为false(也就是0),那么函数将会输出一条提示信息并调用abort函数终止整个程序。首先,此函数的声明头文件在assert.h中,使用的时候需要包含这个头文件,否则编译的时候肯能会出现warning。这一次,assert没有给出信息输出提示也没有触发程序的终止或者崩溃。最近学习的过程中遇到了C语言中的assert函数,弄不明白这个函数到底是什么用。原创 2023-06-28 07:40:17 · 88 阅读 · 0 评论 -
1750_使用gcc对嵌入式代码控制逻辑进行测试
simulink本身具有不错的仿真功能能够让我们预测一下程序运行的效果,在这种功能的对比下或许我们最初的这点小技能根本排不上用场。相信很多人的C语言学习是从printf开始的,为了验证我们的程序代码运行结果,我们通常会选择使用printf打印出我们计算的结果看一下是否与预期一致。到了嵌入式软件开发,或许我们更多地会把经历投入到硬件的动作或者响应而忘记了我们还可以通过这种最初就深入到我们初学知识中的小技能。做了一个小区间的正弦函数查表功能,而我测试的输入时500个离散数据,间隔0.01。原创 2023-06-24 20:40:34 · 99 阅读 · 0 评论 -
1749_宏编译开关_include_sandwich
如果在这之前展开过,那个TEST_H的宏就会被定义过,虽然被定义成了空白,#ifndef的预处理判断就会出现FALSE,整个条件预处理代码块中的其他信息就不会被处理。其中提到了宏编译开关的一点描述,文中比较形象的使用了inlude-sandwich结构来描述,并且强调每个头文件其实都应该带有这么一个include-sandwich的结构。通常,我个人使用的时候都是用来提升编译的速度。不过,接触别人代码的时候也常常发现别人把这种技巧用作代码块的切换,选择不同的宏定义来实现相应代码块的编译。原创 2023-06-23 20:18:24 · 202 阅读 · 0 评论 -
1742_C语言中的指针与数组
之所以常常把数组与指针联系到一块儿是因为数组的名字在很多时候等同于指向数组首元素的指针。在写程序的时候,这常常会给我们带来很多方便。尤其是需要把数组作为一个函数的处理对象时,我自己常常利用这种“指针等同”的技巧。这对于需要处理与数组为对象的各种排序或者滤波功能函数的适应性改进还是很有用的。例外之二:在作为sizeof的参数的时候,数组的名称并不会被当做指针进行处理。sizeof对其处理的结果是返回数组元素的空间大小。例外之一:指针一般是可以进行赋值修改的,但是数组名称是不能够像指针一样被赋值。原创 2023-06-15 20:04:08 · 55 阅读 · 0 评论 -
1729_c语言中全局变量与局部变量以及形参重名问题
这并不能拿来说明PolySPace的这两个模块有什么功能优劣的比较,两个是相互补充相辅相成的,测试的侧重点不同而已。不过,也看的出这检测工具的作用,能够把这种容易导致问题的问题点给挖掘出来。我能够想到的处理方式只能是通过指针,对变量的操作全都通过指针来操作,你想要控制的变量灵活到不能再灵活。局部变量会在所能够作用的代码段内把全局量的效果“屏蔽”掉,至于形参,这只是一个形式上的东西,压根不会跟变量有什么冲突。这虽不是什么语法上的问题或者功能上的问题,但是会给代码的维护带来一定的困难。微信:grey0612。原创 2023-06-02 19:52:22 · 264 阅读 · 0 评论 -
1728_c语言标准库memcpy函数的简单使用
需要注意的是,如果dest定义为局部变量可能第一个printf输出的内容为乱码,因为局部变量没有初始化。定义为全局变量,全局变量是否初始化整个跟编译器还是相关的,我用过的编译器基本上都会将数据初始化为0或者空。在此,借由polysapce的code prover进行简单的检查看一下检测结果。第二个参数是即将被拷贝的原始字符串,第一个参数是拷贝内容最终存放后的字符串,第三个参数用来指定拷贝的字节数。在指针、数组、内存访问的安全与可靠性检测上,polyspace的确是个不错的选择。微信:grey0612。原创 2023-06-01 09:25:50 · 131 阅读 · 0 评论 -
1712_C语言puts函数输出乱码测试
我理解的是\0应该会占据字符串数组中的一个字节的位置,因此在函数输出遇到恰好被字符填充满的字符串(没有给\0留位置)时可能会遇到输出的乱码问题。测试的过程中简单测试到了2048,没有发现数组限制的问题,发现了边界乱码现象。所找到的几个答案说的差不多,但是都不算深入,自己在此先做一下相应的总结后续再追查一下源码。如果测试到那么大的字符串,上面的脚本中延时时间是得加大一些,否则电脑报错。C语言中的puts函数式字符串处理比较好用的一个函数,传入值为数组名称或者是指向字符串的指针。原创 2023-05-17 20:15:44 · 383 阅读 · 0 评论 -
1696_C语言中变量默认初始化初值探究测试
至少,从gcc编译器来看的话应该是0。而局部变量的初始化应该是有非0数值,但是出现0的概率也是蛮高的,我手头的这本书中说的变量(没有指明是否是局部变量)的初始化数值是随机的。我尝试修改了代码的文件名,尝试修改了目录,测试的数据跟之前的数据完全一样。我手头暂时只有gcc,决定用gcc编译器做一个简单的测试,测试手段使用Python。C语言是我现在吃饭的家伙,但是我的家伙事儿确实是维护保养的不够好。很多细枝末节的东西没有学习到位,虽说日常工作中还没遇到多少问题,不过与同行打交道的时候遇到的问题着实不少。原创 2023-05-01 20:26:19 · 45 阅读 · 0 评论 -
1653_C语言在定义数组的时候指定某几个元素的初始值
如同结构体成员的初始化,其实我在初始化的时候是可以做到编写上的“乱序”的。这样的功能看起来暂时考虑不到有什么具体的用法会在我现在的工作中用上,不过至少给了我一点令人开心的信息:C语言的编码有些地方的确是非常有趣。既然只是联想猜测,那么验证的方式其实也很简单,要么去找对应的说明,可能会涉及到C标准,也可能得翻基本C教程。如果猜测的是准确的,那么打印出来的信息中,0、1、2、8应该对应着8、1、5、7的数值。如果支持乱序,首先这个编译应该是可以通过的,其次,应该输出与之前的代码完全一样的输出结果。原创 2023-03-25 19:18:57 · 89 阅读 · 0 评论 -
1310_一个printf的实现分析
这是上面的代码编译、运行的效果。虽然这几个va_xxx的用法实现了函数变参数的调用情况,但是实际上这个参数的数目是无法自动识别的,而是通过代码自己来控制的。这里是字符以及字符串的打印,每一次的处理其实都考虑格式的转换,可能因此导致输出的内容比buffer要多一些,主要的功能还是在于填充以及对齐的方面。其实,这几个函数对我平时的使用来说几乎是没啥用途的,因此,也是可以直接优化掉的。后面的输出也没有什么太多的需要说明的了,这里输出了一个%,其实是只有%但是没有数据格式的时候,那就可以直接输出一个%结束。...原创 2022-07-24 19:11:23 · 188 阅读 · 0 评论 -
1306_两个开源printf的资源使用对比测试
之前,我已经找到了一个很方便可以移植的printf,但是我没有做过资源的消耗统计。网络上查找FreeRTOS的问题,得到的结论反倒是可能是printf的资源占用过多。从这个对比结果来看,Flash的占用方面现在新找到的这个版本要有很大的资源节省。按照前面看到的信息,其实后来找到的这个printf的实现之所以占用的空间少其实是禁用了很多功能。从可用性角度考虑,我自然还是期待我的工具箱中有一个功能比较完备的工具的。上面的测试都是没有开优化的时候测试出来的结果,获取等软件编译的优化选项开一下又是不一样的结果。..原创 2022-07-20 19:44:45 · 281 阅读 · 0 评论 -
1280_C语言求两个无符号整形的平均值
全部学习汇总: GitHub - GreyZhang/c_units: A small piece of code which can be reuse anywhere, I call it a unit. This is a collection of unit in C language! Ok, yes, it would be my toolbox.我的这个工具箱已经有很长时间没有更新了,而这里的模块之前用的最多的3个可能是数组队列、map以及滞环控制。最近在网上看到了微软的人讲解的求解平均数,感原创 2022-06-24 20:47:56 · 571 阅读 · 0 评论 -
1242_C语言实现简单的查表
全部学习汇总: GreyZhang/c_basic: little bits of c. (github.com)C语言的基础的语法以及最基本的用法其实是很简单的,但是如果能够用这些简单的组合解决实际的问题有时候思维需要进行灵活的变通。这种变通一般就是软件设计之中的抽象技术,如果提到抽象有人会感觉不熟悉、困惑,那么最简单的学习理解方式就是结合实际的例子做一个类比。这一次来总结一下C语言中常用的一个技巧——查表法。通常来说,简单的处理使用查表法的时候都是为了追求开发上的快速而决定的。查表不见得会是最简原创 2022-05-18 21:12:35 · 5971 阅读 · 0 评论 -
1227_MISRA_C规范学习_运行时错误规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!这一次来看一下MISRA C 2004中关于运行时错误的规则要求,其实这部分跟多的是在讲项目开发的实施方法上的要求而不是编码规则本身。规则要求也比较简单,只有一条。运行时中的错误至少得用下面的一种方式来检查:1, 静态分析;2, 动态分析;3, 编码进行检查;关于动态检查,可以考虑一下的几个方面:1, 算数错误。原创 2022-05-03 08:14:22 · 235 阅读 · 0 评论 -
1226_MISRA_C规范学习_标准库相关的规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!20.1, 标准库中的保留符号不能够定义、重定义或者取消定义。针对这条规则,其实很好总结,总之就是一句话:不要影响标准库的功能,不要改标准库的信息。20.2, 标准库中的宏、对象以及函数的名称不能够重用。20.3, 传递给库函数的参数全都应该进行有效性的检查。20.4, 不能够使用heap。这个可能有些自己折腾着玩的小项原创 2022-05-02 10:13:03 · 299 阅读 · 0 评论 -
1225_MISRA_C规范学习_预处理命令规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!19.1, 这一条应该难以全部实现,比如在AUTOSAR的软件中进行存储分区是很常见的。而存储分区其实是在反复包含memmap的一个头文件。这样的处理机制就很难保证这一条规则的符合,好在这只是一个建议而不是强制。19.2, 这一条似乎几乎是不可能出现的一个规则要求,应该少有人会在代码文件命名的时候选择使用这样的符号来给自己增加麻烦。原创 2022-05-01 09:40:58 · 268 阅读 · 0 评论 -
1224_MISRA_C规范学习_结构体与联合的规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!18.1, 结构体以及联合在完成转换的时候必须保证结构体以及联合的信息完整性。这里涉及到一个概念,也就是C语言中的不完全类型。那么什么事不完全类型呢?顾名思义,也就是信息不完备的一种表达形式。比如说,声明了一个数组但是不给出数组元素的个数;再比如使用了一个结构体或者联合的名称但是却不给出其定义。这种暂时不给出的信息在编译器最后处理的时候必须原创 2022-04-30 19:05:15 · 285 阅读 · 0 评论 -
1223_MISRA_C规范学习_指针与数组的规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!17.1, 这一条应该是指针和数组一起配合使用的时候要求的,指针的运算必须是指向数组或者数组元素的时候才允许。因为对于嵌入式的硬件访问,在便捷实现上可能有很多种可能。很典型的一个就是存储按照物理地址进行访问的时候,应该还是有这样的可能性。不过,相关的担忧点其实也很容易理解。因为存储排布可能情况还是很多的,而指针的增减等运算其实是跟所指向的对象类原创 2022-04-29 20:35:27 · 471 阅读 · 0 评论 -
1221_MISRA_C规范学习_关于函数的规则要求
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking16.1, 函数的参数数目不能是可变的,这个我在工作中其实是遇到很多可变的设计,自然,遇到的基本都是不符合规范的了。16.2, 函数不能够直接或者间接调用自己。这一条的主要目的是为了避免出现递归,最终导致堆栈空间使用问题。当然,针对递归的使用这里是一刀切了,直接不能用,即使是存储不会增长的尾递归也不允许使用。16.3, 函数的参数必须要有名字。关于这一条,说起来还是很有意思的。我曾原创 2022-04-27 21:53:02 · 365 阅读 · 0 评论 -
1218_MISRA_C规范学习笔记_switch表达式的要求
全部学习汇总: https://github.com/GreyZhang/misra_c_hackingswitch语句如果不加限制的话会引入很多复杂的表达以及bug,因此在使用的时候应该通过风格或者规则来加以限制。对我来说,比较好的一点是在编码的初期就被这些条款卡住了以至于后来看到有些代码的写法让我觉得开启了新的世界一般。随心所欲而不逾矩,规则规范的存在还是好的,至少是可以让自己期待的一切都是可控的。看上去,实现这一条规则的方式也很简单。只要是有执行内容的case最后加上一个break原创 2022-04-24 19:38:13 · 323 阅读 · 0 评论 -
1216_MISRA_C规范学习笔记_控制流的规则要求
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking不能够有执行不到的代码,但是防御性代码除外。关于防御性代码是什么,在后面的规则中可以继续了解。对于我现在接触的各种项目来说,其实这部分冲突最大的点或许是在于标定选择使能的分支生效。这部分的确也是在编译阶段就能够侦测到的,但是在实际的应用中其实还是得保留的。所有的非空表达式要么可以产生某种有效的效果,要么就是可以影响到程序流的选择或者改变。单纯的无效处理是不允许的。空语句之后必须要有原创 2022-04-22 20:59:01 · 448 阅读 · 0 评论 -
1212_MISRA_C规范学习笔记_控制表达式规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!13.1, 赋值操作不能够用以产生布尔量。直白的翻译不是这样翻译,但是我觉得表达的含义应该是这样子。这里就需要有一个明确的认识了,判断条件true或者false应该使用布尔量或者布尔量表达式,但是为了在表达上更加具备可读性,我觉得可以强制做一个要求:判断条件必须是布尔量表达式,哪怕携程bool_func() == true这样的表达也是可以原创 2022-04-18 22:23:28 · 222 阅读 · 0 评论 -
1211_MISRA_C规范学习笔记_表达式的要求
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking12.1, 规则12.1(咨询):在表达式中,应该对C语言的运算符优先级规则有一定的限制。关于这一条规则,有两点需要注意:1,合理使用括号,括号并不是越多越好; 2,有时候,括号的位置会让运算的结果发生变化。在上面的也给出了一个可以参考的例子。通常,在学习阶段可能老师讲解的时候会考察大家对于结合性以及优先级的处理。但是我觉得这个并不是编程的核心点所在,如果以工程实施为目的这样的时间不用原创 2022-04-17 16:37:07 · 383 阅读 · 1 评论 -
1210_MISRA_C规范学习笔记_指针使用的规范性
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking这一次,把整个指针相关的这个章节一起看一下。指针的类型:指向某个对象、指向一个函数、指向void、NULL类型。指针类型转换,允许的隐式转换有:指向对象的与指向void的转换、NULL与其他的类型之间的转换。11.1,这一条要求很简单,函数指针不能够与整形指针以外的其他的类型的指针进行转换。如果这一条不遵守,可能会导致一些未定义的行为发生。11.2,指向对象的指针,可以进行转换原创 2022-04-16 21:21:11 · 790 阅读 · 0 评论 -
1209_MISRA_C规范学习笔记_Rule 10.6
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking对于所有的无符号类型的常量数字都用一个后缀U来进行标识。这里面有几个可能导致误区的知识点:1. 如果数值足够大的话,其实有无这样的区分都是可以的。系统可以识别出来究竟是什么类型,但是如果数值不是很大,可能存在多种可能了。2. 接着第一条,其实还有另一个知识点。那就是数值的大小其实也是相对的,针对不同的MCU的平台,芯片本身的基础数据类型的宽度其实是有差异的。这样,在不同的平台下可能会有原创 2022-04-16 09:14:44 · 683 阅读 · 0 评论 -
1208_MISRA_C规范学习笔记_Rule 10.3 Rule 10.5
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!如果将按位操作符~和<<应用于基础类型unsigned char或unsigned short的操作数,则结果应立即转换为该操作数的基础类型。看了一下这一条规则,我觉得如果拿这一条规则来考察我现在接触到的一群工程师的话,估计十之八九会全都栽跟头。当然,这样的操作在现在的软硬件开发平台上用到的不多是一个原因。另一个原因自然还是基本原创 2022-04-15 21:05:11 · 286 阅读 · 0 评论 -
1207_MISRA_C规范学习笔记_Rule 10.3 Rule 10.4
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!这一对儿规则要求其实是类似的,只是一个应用于整形而另一个则适用于浮点类型。基本的要求其实是简单的:如果进行强制数据类型转换,一定是从宽值范围向窄值范围进行转换。换一个角度也可以去理解这样的要求,如果是从窄值范围到宽值范围的转换,其实隐式的转换模式基本就可以了。这里给出了一部分例子用以说明上面的情况,判断这个使用方式是否规范的一个简单的标原创 2022-04-14 21:48:04 · 840 阅读 · 0 评论 -
1206_MISRA_C规范学习笔记_Rule 10.1 Rule 10.2
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!这两条规则都是关于数据类型转换的,其中10.1是针整形的,而10.2主要是针对浮点类型的。两条规则的要求其实是有相似之处的,都是关于禁止隐式数据类型转换,换言之是必须显式强制数据类型转换确认的要求。什么时候不可进行隐式的数据类型转换呢?下面几点:1,可能出现信息丢失的时候;2, 复杂表达式的时候;3, 作为函数的参数的时候;4,原创 2022-04-14 21:37:18 · 395 阅读 · 0 评论 -
1205_MISRA_C规范学习笔记_Rule 9.3
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking这一条要求是针对枚举类型的量的初始化的。在枚举列表中,除非所有元素都被显式初始化,否则不能使用" = "构造来显式初始化除第一个元素外的其他成员。这个规则要求还是很简单的。要么只初始化第一个,要么不初始化,要么全都初始化。这样,就很容易记住这一条规则的要求。趁着这个机会,回忆一下自己对枚举类型应用的掌握脑子里现在存在的几条比较深刻的记忆。1,如果不进行显式的初始化,枚举类型的元素的原创 2022-04-13 20:12:00 · 256 阅读 · 0 评论 -
1204_MISRA_C规范学习笔记_Rule 9.2
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking要求:数组以及结构体的非零初始值初始化要使用大括号来进行匹配的指示。关于这一条的要求有几个细则,这里面也有之前我一直不熟悉的或者错误认识的地方,在此一起纠正一下。1,多维数组的初始化,成员信息需要使用大括号来进行区分。上面的例子中给出了一个很典型的例子,一个3 * 2的数组的表示。为什么这么表示呢?这个在之前看过的C语言的三本经典教程中其实是对最原始的由来进行过解释的。其实,这个地原创 2022-04-13 20:09:48 · 265 阅读 · 0 评论 -
1203_MISRA_C规范学习笔记_Rule 9.1
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!所有的自动变量在使用之前都应该被赋值。自动变量有好几种可能性,上面的规则中也做了基本的介绍。对于我接触的嵌入式系统来说,根据经验来说这部分在大多数时候都是适用于局部量。由于所使用的存储是一个动态的,如果不进行初始化的话会有随机值出现影响最终的结果。对于全局量来说,为了满足ISO C中的初始化为0的要求,一般都是通过启动代码等处理成符合要原创 2022-04-11 21:42:26 · 405 阅读 · 0 评论