Hello Rainer,
1. Ask Microsoft! ;-)
2. It's briefly an expression before the assignment, and sizes smaller than an int will be converted to an int - then it's converted back for the assignment. The compiler probably shouldn't complain, but I don't know how to fix it cleanly right now (without loosing this useful warning in other contexts, and without duplicating tons of code...).
3. Not in standard C mode (default). In Microsoft mode (/Ze) it's possible to redeclare using the same type (same characteristics) - otherwise you get an error. This is all by design.
Pelle