gpt4 book ai didi

c - 使用(或不使用)stdint 的原因

转载 作者:太空狗 更新时间:2023-10-29 16:19:23 27 4
gpt4 key购买 nike

我已经知道 stdint 用于当您需要特定的变量大小以实现平台间的可移植性时。我现在真的没有这样的问题,但除了上面已经显示的事实之外,使用它的利弊是什么?

在 stackoverflow 和其他网站上寻找这个,我找到了 2 个关于主题的链接:

这两个链接非常有用,特别是如果您想了解更多有关此 header 的主要原因 - 可移植性 的信息。但对我来说,我最喜欢它的是我认为 uint8_tunsigned char(例如用于存储 RBG channel 值)、int32_t 看起来比简单的 int 等更有意义

所以,我的问题是,除了可移植性之外,使用 stdint 的优缺点到底是什么?我应该只在我的代码的某些特定部分使用它,还是在任何地方使用它?如果无处不在,我该如何使用 atoi()strtok() 等函数?

谢谢!

最佳答案

优点

使用明确定义的类型使代码更容易和更安全地移植,因为当一台机器将 int 解释为 16 位而另一台机器解释为 32 位时,您不会感到惊讶.使用 stdint.h,您输入的就是您得到的。

使用 int 等也很难检测到危险类型的提升。

另一个优点是通过使用 int8_t 而不是 char,您知道您总是得到一个带符号的 8 位变量。 char 可以是有符号的或无符号的,它是实现定义的行为并且因编译器而异。因此,在应该可移植的代码中使用默认的 char 是很危险的。

如果你想给编译器一个变量应该被优化的提示,你可以使用 uint_fastx_t 告诉编译器使用尽可能快的整数类型,至少和 'x 一样大'.大多数时候这无关紧要,编译器足够聪明,可以对类型大小进行优化,无论您输入的是什么。在序列点之间,编译器可以隐式地将类型更改为指定类型之外的另一个类型,只要它不影响结果。

缺点

没有。


引用:MISRA-C:2004 规则 6.3。“指示大小和符号的typedef 应用于代替基本类型”。

编辑:删除了不正确的示例。

关于c - 使用(或不使用)stdint 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9834747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com