gpt4 book ai didi

结构之间的转换?

转载 作者:行者123 更新时间:2023-12-02 06:46:12 25 4
gpt4 key购买 nike

我正在开发一个代码库,其中我们有几个可配置的类型。其中一种类型是 64 位整数。当我们为没有原生 64 位整数类型的平台编译时,我们使用类似于

的结构简单地表示 64 位整数
typedef struct {
unsigned int hi, lo;
} int64;

为了使这种类型有用,所有常用操作都定义为函数,例如

int64 int64_add(int64 x, int64 y);

在原生 64 位整数类型可用的平台上,这些操作看起来像

#define int64_add(x, y) ((x) + (y))

总之,进入正题。我正在实现一些与时间有关的功能,我想使用 64 位整数来表示我的时间:

typedef int64 mytime;

我还希望 int64 类型可用的所有常见操作也可用于我的时间类型:

#define mytime_add(x, y) (mytime) int64_add((int64) (x), (int64) (y))

问题在于 C 中不允许类型 mytime 和 int64 之间的转换(据我所知)。有什么方法可以做到这一点而不必为 mytime 类型重新实现所有的 add、sub、mul、div 等函数?

当然,一个选择是永远不要使用 mytime typedef,而是在需要表示时间的任何地方都使用 int64。这个问题是我不确定我是否总是想将时间表示为 64 位整数。然后还有可读代码的问题...... :-)

最佳答案

因为您使用的是 typedef,所以根本不需要强制转换。 C 中的 Typedef 不会创建不同的类型,只会创建另一种类型的别名。编译器不区分它们。只需将 mytime_add 函数编写为:

#define mytime_add(x, y) int64_add((x), (y))

或者如果您的 C 编译器足以进行内联:

mytime mytime_add(mytime x, mytime y) { return int64_add(x, y); }

关于结构之间的转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267949/

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