在嵌入式系统软件开发上,对不同的平台,其每个机器字长都可能不同。在这个硬件平台上使用int,可能是4个字节,你做一个很大整数的运算也没问题。
但换个硬件平台,int可能变成了2个字节,那你运行一个大整数运算,就可能会溢出。所以软件移植时就要注意。
还有一些操作,是和变量占用的字节长度有关的。比如使用一个16位的寄存器的值,在32位的机器上要用short类型来表示,在16位机器上,就用int类型来表示。
那为了方便代码的移植,最好使用固定字节长度的变量,比如在定义整数时加上使用的是几个字节或多少位。
比如:
typedef int byte2_t;
typedef int byte4_t;
typedef int int32_t;
这些都是程序员自己定义的,来保证软件的实现和硬件平台的无关性,使代码可以跨平台使用。
比如一些最早期的嵌入式项目的代码中, 都会有个专门的类型定义的头文件,使基本类型的字节长度不依赖于平台。
为了方便开发者,较新的C和C++标准中引入了一个头文件(从C99开始),<stdint.h>或<cstdint>,里面定义了固定字节宽度的类型。
To help with cross-platform portability, C99 defined a set of fixed-width integers (in the stdint.h header) that are guaranteed to have the same size on any architecture.
所以我们开发中,如果有条件就用最新的C标准库,直接使用这个新库的头文件stdint.h即可,而不用考虑平台特性。
标准库已经把平台特性屏蔽了,不用我们去考虑硬件平台的细节。
包含这个头文件后,就可以使用下面这些类型定义了:
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)