Цитата(_Ivana @ Jan 20 2012, 11:27)

Насколько я ничего не знаю в стандарте С, то тут или это дыра в стандарте, или пока никто не привел прямую цитату с однозначным толкованием данного случая.
Ну так вот и почитайте стандарт самостоятельно. Стандарт существует и независимо от приведения цитаты, так что «или - или» тут не катит. Искать и приводить цитату на этот раз не буду — чем больше я это делаю, тем больше мне говорят, что я выпедриваюсь никому не нужными знаниями. Потрудитесь получить их самостояельно.
Цитата(_Ivana @ Jan 20 2012, 11:27)

Если при проверке на равенство вычисляется тип и значение левого выражения, а правое приводится к этому же типу - то будет один результат. Если вычисляются типы и значения обоих выражений и меньший тип расширяется до большего, то другой. Если они сразу приводятся к int, то может быть ещё моменты.
Ну так вот и найдите в стандарте это место. Аглицкое слово promotion уже подсказали, осталось поиск по тексту произвести самостоятельно.
В вычислениях приводится к самому «старшему» из принимающих участие типов. Достатончо простой логики. Иначе в
Код
unsignd long total;
unsigned char value;
total = total + value;
total никода не превысит 255.
В вычислениях типы меньше int — приводится к int. Это уже специфика С.
Цитата(_Ivana @ Jan 20 2012, 11:27)

Кстати, глупый вопрос - а если поменять местами и написать if ((v2 + v3) == v1) результат не поменяется ни в каком компиляторе?
Если поменяется — то это вообще п’яный какой-то компилятор.
Цитата(_Ivana @ Jan 20 2012, 11:27)

И ещё один - с превышением разрядности при сравнении суммы переменных типа int такой дырки в стандарте нет?
Тут ВООБЩЕ ДЫРКИ НЕТ.