该int溢出检查的版本加/减/乘在GCC内建命令返回一个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)
Run Code Online (Sandbox Code Playgroud)
这太破碎了,我甚至不敢相信.这意味着,在目标上,其中long和long long具有不同的尺寸(例如,32位的ARM的iOS目标),所述ll的功能版本是完全无用的.