c语言__int32,什么时候应该在C中使用UINT32_C(),INT32_C(),…宏?

作为经验法则,当文字的类型重要时,您应该使用它们.有两件事要考虑:大小和签名.

关于尺寸:

int类型由C标准值保证高达32767.由于您不能获得一个小于int的整型文字,所以小于32767的所有值都不需要使用宏.如果需要较大的值,那么文字的类型开始变得重要,使用这些宏是一个好主意.

关于签名:

没有后缀的整数文字通常是签名类型.这是潜在的危险的,因为它可能会在隐式类型升级期间引起各种微妙的错误.例如(my_uint8_t 1)<< 31将导致32位系统上的未定义的行为错误,而(my_uint8_t 1u)< 31不会. 这就是为什么MISRA有一条规则,说明如果打算使用无符号类型,所有的整数字面值都应该有一个u / U后缀.所以在我上面的例子中,你可以使用my_uint8_t UINT32_C(1),但是你也可以使用1u,这可能是最可读的.对于MISRA来说应该是罚款. 至于为什么stdbool.h将true / false定义为1/0,这是因为标准明确表示. C中的布尔条件仍然使用int类型,而不是像C中的bool类型,因为向后兼容性原因. 然而,它被认为是良好的风格来处理布尔条件,就好像C有一个真正的布尔类型. MISRA-C:2012有一套关于这个概念的规则,称为基本上是布尔型.这可以在静态分析过程中提供更好的类型安全性,也可以防止各种错误.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值