技巧和窍门–创建和使用便携式类型的7个技巧

拼图块

对于嵌入式软件开发人员而言,编写可重用,可移植且经得起时间考验的软件至关重要。以下是在C中创建和使用可移植类型的7个技巧。

提示1– Use stdint.h

内置数据类型的使用可能导致不同编译器之间的可移植性问题。 C标准没有指定整数的存储大小,这导致某些编译器供应商使用2或4个字节来存储整数。结果可能是灾难性的。

使用内置数据类型的一种安全替代方法是改为使用stdint.h固定宽度整数。这些数据类型uint8_t,int8_t,uint16_t,int16_t,uint32_t和int32_t指定存储数据所需的存储位数。移植任何这些数据类型都会在任何编译器中导致相同的行为,并赢得’t导致四个字节的存储突然变成两个。

提示2– Use stdbool.h

开发人员有时可能会决定他们想要一种可以存储简单的true或false值的数据类型。通过包含stdbool.h,可以将标准布尔数据类型及其正确或错误的定义引入项目中。

提示3– Don’t自定义定义TRUE,FALSE,布尔

在上一个技巧中,建议使用标准库文件stdbool.h。一些开发人员可能没有意识到stdbool存在,或者可能决定不使用它。相反,他们自定义定义布尔值,true和false。这样做的问题是,当移植具有自定义版本的代码时,如果尝试重新定义true,false和bool且编译器抱怨,则会发生不匹配的情况。唐’要创建自己的版本,只需按照提示2。

提示#4避开自定义整数类型

使用typedef创建简洁明了的类型名称是编写嵌入式软件的好方法。当开发人员开始定义看起来非常接近标准整数的非标准整数类型时,就会出现问题。例如,采用以下自定义类型

typedef volatile uint16_t vuint16_t;

在软件中看到vuint16_t会令人困惑。什么是v?混淆volatile关键字可能很危险!应该’开发人员是否被迫编写易失性,以便阅读代码的开发人员知道变量是易失性的?读取vuint16_t很容易被误读为uint16_t,甚至更糟,开发人员可能会不小心键入uint16_t并完全错过了v。

保持标准类型,并在任何阅读或维护代码的人员面前直接使用诸如volatile之类的重要关键字。

提示5–自定义类型应具有_t

定义自定义类型时,请使用_t匹配固定宽度的整数类型。简单明了。例如下面的例子;

Typedef枚举

{

STATE_1,

STATE_2

} State_t;

很明显State_t是一个typedef。

提示6–使用枚举的自定义类型

创建类似于技巧5中所示的自定义数据类型可以极大地提高嵌入式软件的可读性和可维护性。在#define定义上使用enum具有许多优点。 enum的使用易于维护,端口(甚至是C ++)和enum将显示在调试器监视窗口中。 Typedef枚举的功能是C语言中非常强大的工具,因此请明智地使用它!

提示#7– Don’t混淆底层类型

使用typedef的危险之一是很容易混淆基础类型。例如,如果未正确命名新类型,则结构的typedef可以隐藏数据是结构的事实。开发人员应该能够阅读和识别数据的基本类型,而不必搜索文档或源代码。回顾技巧4,用v掩盖volatile是相同的想法。结果数据类型需要以简洁明了的方式使其变得明显。

 

 

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.