C
文章平均质量分 60
tqfChina
记录学习嵌入式的点点滴滴
展开
-
函数声明的形参问题
遇到这样一个问题a.hvoid func();a.cvoid func(int abc){ if(0 == abc) { abc++; } return;}b.c#include "a.h"int main(void){ func(); return 0;} 上面这一系列代码,在某些编译器编译后,并不会报错,但当其运行时,会发生错误具体系统都做了些什么呢由于操作系统的内部机制不同,错误的原创 2021-01-08 10:49:38 · 705 阅读 · 0 评论 -
关于结构体的位域
说到位域,不得不说这是一个很有意思的东西,我平时用得不太多,因为这个东西在我的印象里是对内存抠到极致迫不得已才会使用它的。一般情况下我使用的硬件环境都还比较资源够用,所以就不怎么用,但是既然提到了,也就写一篇关于位域的文,大概从以下几个方面来说,一、基本形式:位域定义与结构定义相仿,其形式为:struct 位域结构名{ 位域列表};其中位域列表的形式为:类型说明符 位域名: 位域长度例如:typedef struct bs{ unsigned原创 2020-07-01 19:55:35 · 5409 阅读 · 2 评论 -
C语言编码安全规范 高频易错10条
1.程序中不要出现仅靠大小写区分的相似的标识符,以防止混淆。2.防止局部变量与全局变量同名。doubled=0;voidfunc(void){ intd=5; doubleb=d;//有的编译器会匹配全局变量,因为全局变量的类型更匹配,有的会匹配局部变量。}首先,匹配哪一个会有不确定性,不同编译器不同。其次,如果局部变量和全局变量的类型与...原创 2020-05-07 11:23:22 · 764 阅读 · 0 评论 -
C语言中不同类型的运算和比较问题
今天写代码的时候遇到这样一种情况:首先我能获取到一个配置的电压信息,类型是UINT8然后我要用当前的实际电压与配置的电压进行比较,问题是 我获取到的配置电压单位是0.1V,当前实际电压单位是0.01V所以工需要将我获取到的配置电压 乘以 10,再和实际电压进行比较,我是这样写的:if(CurrentV < (ConfigV * 10))/* ConfigV :配置电压 ...原创 2020-04-20 21:36:22 · 5268 阅读 · 0 评论 -
结构体如何初始化
很多时候我们在使用结构体的时候会纠结如何初始化,我最常用的一种方法是:结构体 = {0};下面我们来看一下这样初始化的结果是不是我们想要的。我希望将结构体中的所有变量全部初始化为0,包括结构体中的数组和结构体以及时不时被扎得生疼的指针。因为之前在研究数组初始化的时候发现,直接写数组 = {0};会把数组中所有的元素都初始化成 0,这是利用了编译器的一个特性:如...原创 2020-04-03 15:39:09 · 2672 阅读 · 0 评论 -
数组初始化
关于数组可能所有人都很熟悉,但是这里我想说一下我对这个数组的使用过程中发现的问题:在函数内定义一个数组,不初始化,数组的值不确定 这个故事告诉我们在函数体内定义的变量都是在栈里的,如果不初始化那么它一定是前面使用过后的垃圾值。```int main(void){ UINT8 Array[10]; return 0;}```...原创 2020-04-03 15:22:41 · 918 阅读 · 0 评论 -
枚举类型在结构体中占多少字节
这个问题是我在写结构体时发现的,编译器突然在一个枚举类型的成员变量后面提醒字节未对齐。于是,枚举类型在结构体中占多少字节这个问题就产生了。一开始我以为它只占一个字节,结果我从上到下看了一下发现不对。如果占一个字节说明这不会提示有问题,应该直接对齐了才对所以它一定不是占一个字节。带着好奇心上网找了一下,网上暂时只找到了这种描述: 标准C并没有明确规定枚举类...原创 2019-06-14 21:13:01 · 16602 阅读 · 3 评论