GCC 中的溢出检查加法/减法/乘法内置函数的 int
版本返回一个 int
结果(良好),而 long int
版本返回一个 long int
结果(也不错),但是 long long int
版本返回一个 long int
结果(不好)。为什么是这样?我觉得这很疯狂。
例子:
bool __builtin_uadd_overflow (unsigned int a, unsigned int b, unsigned int *res)
bool __builtin_uaddl_overflow (unsigned long int a, unsigned long int b, unsigned long int *res)
bool __builtin_uaddll_overflow (unsigned long long int a, unsigned long long int b, unsigned long int *res)
这太坏了,我什至不敢相信。这意味着在 long
和 long long
大小不同的目标上(例如,32 位 ARM iOS 目标),ll
版本的功能是完全无用的。
最佳答案
这是 GCC 中的一个错误,尚未修复。
关于c - 为什么 `__builtin_{{s,u}{add,sub,mul}ll_overflow` 给出 `long int` 结果而不是 `long long int` 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580978/