汎整数拡張
上記「条件と変換結果」の項に示したサンプルの式(2)では、インクリメント演算子の意味と、各型で表現可能な値の範囲を知ってさえいれば、(汎整数拡張のルールについて詳しく知らずとも)結果は十分予測できる。しかし、汎整数拡張はコンパイル時に勝手に裏で行なわれる「暗黙の型変換」であるため、ルールを知らなければ意外なバグの原因となる場合がある。
上記の例では、-1のほうが1より小さいことから、一見してsi < uiの比較結果は真 (1) となるように見えるが、実際には汎整数拡張により、siのほうがunsigned intに変換され、-1がUINT_MAXに変換されることによって、比較結果は偽 (0) となる。とはいえ、このような例(符号付き型と符号無し型の比較)は典型的なプログラミングミスであり、通例コンパイラが警告を発する対象となる。
具体的な解決策としては、式の中で用いる変数の型を揃える、できるかぎり表現可能な値の範囲の広い型を使用する、といったことが挙げられる。
また、処理系により整数型のビット数が異なることがあるので、あるソースコードをそのまま別の処理系で動作させる際、汎整数拡張により、移植前の処理系では起こり得なかったバグが急に発生するというケースもある。この場合は、整数型のビット数に依存しない、移植性の高いソースコードを書くということが何よりの解決策となる。