Re[6]: каждый раз, когда вы пишете i++ + ++i...
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 19.06.14 13:07
Оценка:
Здравствуйте, Don Reba, Вы писали:

N>>Не должно быть никакого "что угодно". Должно быть примерно следующее (и это должно быть в стандарте): в случае, если результат не помещается в целевой тип целого со знаком, компилятор и среда исполнения могут, по выбору:

N>>• выполнить операцию в соответствии с правилами платформы
N>>• выполнить операцию в соответствии с общепринятой арифметикой в дополнительном коде
N>>• выполнить операцию, отдав в качестве результата зависящее от реализации значение
N>>• по зависящим от реализации правилам выполнить действие, предусмотренное для особой ситуации типа "целочисленное переполнение"
DR>Предположение, что переполнения быть не может в принципе позволяет комиляютору соптимизировать выражение x * 2 / 2. А ограничения выше — нет.

Это решается банально, если в выражениях следить за доменами возможных значений параметров. При этом x*2 может, в зависимости от того, откуда взялось, иметь разную семантику. Если это x*2 от пользователя, то оно само по себе уже типа int. Если же оно возникло от индексации массива short'ов, то оно является чем-то вроде int33_t.
Для компилятора уровня gcc следить за такими вещами тривиально — он и в значительно более сложных материях много гитик.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.