我目前正在编写一个程序,该程序大量使用uint64_t
类型,以增强跨平台的兼容性。
碰巧,我的程序有很多溢出的可能性,所以我想使用built in overflow functions from gcc .
不幸的是,它们仅在 int
、long int
、long long int
等上定义。 uintX_t
类型保证大小始终为 X 位,但这些类型的情况并非如此,例如long int
不保证是 64 位。这让我觉得内置的溢出函数不能在这里使用。
现在如何解决这个问题?
我有两种方法:
使用
stdint.h
中的UINT64_MAX
常量并自行进行溢出预测。不过,我并不是“重新发明轮子”的 friend 。使用例如
__builtin_add_overflow_p
函数仅检查溢出。但是,我不能 100% 确定它们是否可以应用于uint64_t
。
最好的方法是什么?我是否在监督一些显而易见的事情?
最佳答案
Using builtin overflow functions with
uint64_t
... to use the built in overflow functions from gcc.
要形成您自己的 builtin_uadd64_overflow()
,而不需要“重新发明轮子”,请使用 _Generic
来引导函数选择。
#define builtin_uadd64_overflow(a,b,r) _Generic(*(r), \
unsigned: __builtin_uadd_overflow, \
unsigned long: __builtin_uaddl_overflow, \
unsigned long long: __builtin_uaddll_overflow \
)(a,b,r)
关于c - 使用带有 uint64_t 类型的内置溢出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59373630/