Cは、様々な大きさの数値を扱うデータ型が用意されている。intより小さいものも幾つかあるが、このデータ型は演算時に汎整数拡張の対象となるため、扱いが難しく注意が必要である。charのような符号なし整数型であっても対象で、演算時には符号のあるint型となる。promotion)という訳語が使われているが、意図するところは同じである。charを例として、次のようなケースを考える。charであるから、0-1はUCHAR_MAX、つまり255になるだろう、と考えたら誤りである。どのような場合でも、演算は汎整数拡張により両オペランドをint型に昇格して計算される。この式では、残念ながら次のように評価される。1は「-1」になるのである。問題intの長さは処理系依存である。それが16ビットであるか32ビットであるか、あるいはそれ以外の長さであるかは、完全に環境に依存した問題である。この型変換は自動的に行なわれるため、ソースコードを一見しただけでは問題の箇所が分からず、深刻なバグの原因ともなりうる。変にケチってcharやshortなどを使うより、素直にintを使っていた方が実は移植性も高まり、意図せぬバグの混入も避けられるのである。