The key for compilation -Wconversion is very important. Its absence by default hides programming errors on different platforms. It is desirable to include this key with the help -Wall.
Quoting the FAQ at http://gcc.gnu.org/wiki/NewWconversion#faq Why Wconversion is not enabled by -Wall or at least by -Wextra? Implicit conversions are very common in C. This tied with the fact that there is no data-flow in front-ends (see next question) results in hard to avoid warnings for perfectly working and valid code. Wconversion is designed for a niche of uses (security audits, porting 32 bit code to 64 bit, etc.) where the programmer is willing to accept and workaround invalid warnings. Therefore, it shouldn't be enabled if it is not explicitly requested.
The niche is selected incorrectly. Basically the considerable quantity of errors of programming is linked to implicit type conversion. void insert(char*,char,unsigned int){..} insert(..,..,size_t); Example double d = 1.0; int i; i = d; correctly and necessary to write so: double d = 1.0; int i; i = (int)d; In the program text this obvious conversion will be visible.