Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>Здравствуйте, Посторонним В., Вы писали:
ПВ>>Вместо ПВ>>SHRT_MAX + 1 следовало читать SHRT_MAX ПВ>>и соответственно ПВ>>вместо INT_MAX + 1 следовало читать INT_MAX
ПВ>>голова дурная уже в час ночи ПВ>>но как я понял от этого ничего не поменяется: все равно будет в обоих случаях будет UB
АТ>Общий итог — не поменяется. Просто все те же эффекты теперь переместятся от инициализаций к инкрементам.
АТ>В случае с 'i' мы опять получим неопределенное поведение на инкременте '++i' по тем же причинам.
АТ>В случае с 's' мы опять получаем либо неопределеное поведение (если диапазон 'short' совпадает с диапазоном 'int'), либо результат, определяемый реализацией (в противном случае). По тем же причинам.
АТ>Т.е. конкретного ответа в общем случае по-прежнему нет.
почему нет конкретного ответа, я посмотрел на код ассемблера и пришел у видел то, что и ожидалось. Вот ассм прпрограмма написанная мной в спреде VC++6, поставив точки останова можно посмотреть значение регистров и переменных, ответ будет 0x80000000:
main()
{
int A;
bool wasOverflow = FALSE; // переменная, в которую бедет запизано TRUE в случае переполнения
A = INT_MAX + 1; // кладем максимальное чило, если добавим +1 то будет переполнение,
__asm{
push eax;
mov eax, A;