重複の可能性:
C/C++ で整数オーバーフローを検出する最良の方法
Cで関数を書いていますが、質問は一般的です。この関数は 3 つの整数を取り、これらの 3 つの整数に関する情報を返します。
ここで私が疑う問題は、整数が最大になる可能性があり、これがオーバーフローを引き起こす可能性があることです。
例: 可能な最大値として a を渡し、b が 1 から最大までの任意の値を指定できる場合、この場合、式 (a+b)>c は if 条件でオーバーフローを引き起こしますか? もしそうなら、どうすればそれを処理できますか?
私の解決策は、長い整数を一時変数として保持して a+b の値を保持し、それを式で使用することでしたが、それは汚い方法に聞こえます。
このスニペットを参照してください。
int
triangle_type(int a, int b, int c) {
if (!((a+b)>c)&&((b+c) > a)&&((a+c>b))) {
return -1;
}
}