armfly 发表于 2012-12-16 13:44:13

你喜欢哪种写法申明变量,关于C库中的 stdint.h 头文件

例如声明一个8位无符号整数,常见的有如下几种写法:
u8 err;
U8 err;
INT8U err;
UINT8 err;
uint8 err;
uint8_t err;   【我们推荐的写法,这种写法符合C99规范,ST最新的固件库都沿用该写法】

你喜欢哪种形式的变量申明类型?

你有没有这种体会,阅览不同人编写的程序,重定义的变量类型五花八门。当你整合部分软件模块时,经常遇到风格各异的变量类型,看着极其不爽。
甚至你自己都无法确定自己写的代码用哪种写法合适?

如果你遇到这种困惑,那么这个帖子可以为你指明一个方向。

其实最基础的标准c语言规定了 int , unsigned int,long 等类型,但是很不幸的是 int 在8位单片机C编译系统是16位的整数,int 在32位单片机C编译器系统是32位。
于是便衍生了 typdef 重定义的变量类型来规避此类风险。

我们来看看ST公司的STM32固件库的变化,STM32F1固件库经历了V1.x, V2.x, V3.x 几次大的升级。从V3.x开始,所有的变量类型由简单的u8、 s16 等更名为 uint_8、int16_t 等较为规范的类型。
更改之后的变量类型名变长了,增加了键入的工作量。你想过为什么ST公司会做出这种改变吗?

因为这种写法遵循了c99规范。开发环境中的头文件stdint.h已经定义了这些标准typedef.

stdint.h是c99 (c语言规范)中引进的一个标准C库的头文件. 目前大部分单片机C编译器均支持,当然IAR和MDK都支持。 linux 系统下的编译器也支持.
这个文件在不同的C编译器的存放路径如下: [可以自己打开stdint.h文件,看一下它定义了哪些类型]
ARM编译器MDK       C:\Keil\ARM\RV31\INC
ARM编译器EWAM      C:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\inc
STM8编译器EWSTM8   C:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation_2\stm8\inc\c
PIC编译环境MPLAB   C:\Program Files\Microchip\MPLAB C32 Suite\pic32mx\include
飞思卡尔单片机环境C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.2\ColdFire_Support\msl\MSL_C\MSL_Common\Include
PC软件C++ BuilderC:\Program Files\Borland\CBuilder6\Include

stdint.h中定义了一些整数类型,规则如下
  int8_t, int16_t, int32_t, int64_t   表示各种长度的有符号整型数
  uin8_t, uint16_t, uint32_t, uint64_t表示各种长度的无符号整型数
  定义了一些常量表示以上各类型数的最大最小值. (如果你的程序需要检查整数的值域,那么可以直接用这些宏即可,没必要自己再定义了)
  INT8_MIN, INT8_MAX
    INT16_MIN, INT16_MAX
    INT32_MIN, INT32_MAX
    INT64_MIN, INT64_MAX
这些宏的定义如下(仅仅举了2个例子,其他的参见 stdint.h
#define INT8_MIN                   -128
#define INT16_MIN                -32768

安富莱开发板配套的STM32例程,从2009年最初的版本开始就一直沿用C99的标准写法来定义整数。
我们做其他的单片机项目也是采用这种写法,比如STM8、PIC,飞思卡尔甚至51单片机。

如果你拿不定选择哪种写法好,那么就请按C99的规范来定义整数。


stm32f4 发表于 2012-12-16 17:35:41

此贴发的太及时了,
UCGUIUCOSST的库使用的都不一样,所以自己使用的时候也是五花八门。 以后得统 一 一下了

lavion 发表于 2013-1-1 00:13:23

用了很多年这样的风格 uint8int8...
其实其他风格也无所谓,关键是一看就知道,有无符号几位的就行。
别弄的看都看不出来就OK

snow 发表于 2024-3-25 20:05:40

可以统一了,出师有名👍名正言顺低规避了麻烦
页: [1]
查看完整版本: 你喜欢哪种写法申明变量,关于C库中的 stdint.h 头文件