【发布时间】:2008-11-06 08:33:01
【问题描述】:
我正在开发一个代码库,其中我们有几种可配置的类型。其中一种类型是 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 位整数。然后还有可读代码的问题...... :-)
【问题讨论】:
标签: c