硬汉嵌入式论坛

 找回密码
 立即注册
查看: 16003|回复: 3
收起左侧

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

[复制链接]

757

主题

1049

回帖

3325

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3325
发表于 2012-12-16 13:44:13 | 显示全部楼层 |阅读模式
例如声明一个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++ Builder  C:\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的规范来定义整数。


回复

使用道具 举报

20

主题

55

回帖

20

积分

初级会员

积分
20
发表于 2012-12-16 17:35:41 | 显示全部楼层
此贴发的太及时了,
UCGUI  UCOS  ST的库使用的都不一样,所以自己使用的时候也是五花八门。 以后得统 一 一下了
天天向上
回复

使用道具 举报

1

主题

24

回帖

57

积分

初级会员

积分
57
发表于 2013-1-1 00:13:23 | 显示全部楼层
用了很多年这样的风格 uint8  int8...
其实其他风格也无所谓,关键是一看就知道,有无符号几位的就行。
别弄的看都看不出来就OK
回复

使用道具 举报

1

主题

30

回帖

33

积分

新手上路

积分
33
发表于 2024-3-25 20:05:40 | 显示全部楼层
可以统一了,出师有名👍名正言顺低规避了麻烦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:32 , Processed in 0.237081 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表