符号無し整数を加算するとき桁あふれを検出するには、
計算前の値を保存して毎回チェックするしかないんでしょうか?

 result = a + b + c;

だと桁あふれする可能性があるので

 unsigned int RobustPlus(unsigned int a, unsigned int b) {
  unsigned int tmp;
  tmp = a;
  a += b;
  if (tmp < a) {
   return UINT_MAX;
  }
  return a;
 }

 result = RobustPlus(RobustPlus(a, b), c);
 if (result == UINT_MAX) { error(); }

としてみたものの、どうも格好悪くて釈然としません。