C/C++关于基本数据类型的使用

场景:
  某模块运行在MCU上的代码需移植到Qt/VS++上,发现MCU代码几乎都是用u8、u16等之类的数据类型,而新的平台上并未提供该类型。对于这类情况,有两种处理办法,一种是把原代码中的数据类型全部修改为C/C++库的封装类型或者C/C++基本数据类型,新平台只需引用对应库的头文件即可。另外一种是在新平台上,利用“typedef”关键字定义出u8、u16等类型。

  对于一门编程语言来说,在使用或者新接触时,我们首要了解的是其提供的数据类型,而C语言作为高级语言的基础,所以也是编程者必须掌握的语言。C语言提供的基本数据类型有:整型(int)、长整型(long)、短整型(short)、字符型(char)、单精度浮点型(float)、双精度浮点型(double),这些类型也是最常用的,不论是底层MCU程序还是上层应用开发。

  在程序开发中,会遇到各种C/C++的基本数据类型的“别名”,即是通过“typedef”关键字重新定义的类型。例如几种情况:
  1)C标准中,也是最常见的,int8_t、uint16_t、uint32_t。
  2)MCU中STM32提供的头文件库,u8、u16、u32。
  3)RT-Thread重定义类型,rt_int8_t、rt_uint16_t、rt_uint32_t。
  4)Qt(C++)中重定义类型,qint8、quint16、quitn32。

  以上几种情况的类型命名,都是由C/C++基本类型,通过“typedef”关键字声明得到的“别名”。其中作用应该有几点。一是便于阅读和记忆,通过名称即可知道数据类型,如u8代表8位无符号整数,u16代码16位无符号整数。二是便于移植和跨平台,如跨平台(跨Windows、Linux、Android)性能非常棒的Qt。其他方面,则是程序库或者系统类型的特征标识,如Qt重定义类型都是以“q”开头,RT-Thread(实时系统)类型则以“rt_”开头,非常便于区分。当然除了上述类型,我们也可以定义“属于自己”的类型,自己写的库、函数、通用模块等,方便移植到各类平台。

  就鄙人的使用经验来说,一般情况下使用C/C++库的类型是最合适的,这样写的程序可以使用在各类支持C/C++库的平台上无须作任何修改即可使用,如MCU下的C代码移植到Qt C++成员函数中,或者移植到RT-Thread中等。相反,以Qt为例,某部分代码以使用的是Qt自带类型(quint8、quint32等),此段代码需要移植到MCU上或者VS上执行时,则需要重新修改数据类型,显得累赘。当然,无论是Qt还是RTT(RT-Thread)使用自己定义的类型,都有优点,就是不管在什么硬件平台运行,只要是相同软件件平台即可实现非常好的跨平台性能。因此,如果考虑到程序在相同软件平台下,则首先考虑使用该软件平台的自定义类型。

总结:
1)代码有可能在各种软件平台/程序库上移植,则采用C/C++库的封装类型,或者直接使用基本的数据类型。
2)为了兼容同一软件平台,则尽可能用该软件平台提供的数据类型,如RTT、Qt等。
3)自己写的常用模块、函数、类库等,可以自定义新类型,新类型可能是基本数据类型的衍生、结构体、共用体、类对象等,做好相关说明文档,则在各种平台下易于交叉使用。

posted @ 2018-05-20 00:29  Acuity  阅读(93)  评论(0编辑  收藏  举报