gpt4 book ai didi

c - "typedef"如何使我的代码可移植?

转载 作者:太空狗 更新时间:2023-10-29 16:07:47 26 4
gpt4 key购买 nike

我读到大多数程序员使用 typedef 来确保可移植性。

当我写例如:

typedef int int16_t

typedef unsigned int uint16_t

只要 int16_t 与 int 相同(唯一的变化是名称)那么这里的可移植性在哪里?!为什么我不应该直接使用 int?!

另一个问题:在不同的微 Controller 上,int 的大小不是恒定的,例如在 AVR 32 中,int 的大小 = 4 字节,而在 AVR 8 位中, int 的大小 = 2 字节

它取决于什么,为什么会随着单片机的变化而变化?!

最佳答案

int 类型的大小在 C 中没有明确规定,它只应该至少等于 16 位。因此,在某些处理器架构上,编译器将其实现为 16 位,而在其他一些处理器架构上,编译器将其实现为 32 位。因此,如果程序员编写 int a,第一个架构需要 2 个字节,第二个架构需要 4 个字节——即跨平台的行为不一致(考虑到“大小”方面缺乏可移植性) ).

为避免这种情况,在一些全局头文件(例如 types.h)中使用 uint_16uint_32 等名称定义类型。在 types.h 中,用户定义的类型将被正确映射到合适的 native 类型——并且 types.h 中可能有特定于处理器的定义。例如考虑你的例子:-

#ifdef AVR_32
typedef unsigned int uint_32
#else
typedef unsigned long uint_32
#endif

后来,程序员会使用这些类型(uint_16、uint_32 等),而不会自己关心大小。

关于c - "typedef"如何使我的代码可移植?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19499321/

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