4
コンパイラのビルトインを使用せずにオーバーフローセーフな追加を効率的に計算するCスニペットはありますか?
intオーバーフローが発生すると失敗する、別のに追加するC関数を次に示します。 int safe_add(int *value, int delta) { if (*value >= 0) { if (delta > INT_MAX - *value) { return -1; } } else { if (delta < INT_MIN - *value) { return -1; } } *value += delta; return 0; } 残念ながら、GCCやClangでは十分に最適化されていません。 safe_add(int*, int): movl (%rdi), %eax testl %eax, …