我目前有一个使用易于整数溢出的加法和乘法的代码库。我正在尝试用__builtin_add_overflow()函数来代替它。阅读源代码,我发现很多出现以下格式的情况:
x += y;
Run Code Online (Sandbox Code Playgroud)
我可以将其替换为__builtin_add_overflow(x, y, &x)还是需要一个临时变量,如下所示?
int tmp;
if (__builtin_add_overflow(x, y, &tmp)) { ... }
x = tmp;
Run Code Online (Sandbox Code Playgroud)
前两个参数按值传递。只有最后一个是指针。在这种情况下不会出现锯齿问题。传递值会创建副本(至少在概念上如此,因为内联/静态函数和内置函数可以绕过常规函数调用 ABI)。内置函数获取 的副本x,并且该副本不再影响原始x。
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |