на этом форуме в какой-то теме помнится довольно внятно все было расписано касаемо сабжа. поищите, там больше разъяснений. ну или в вики по пред. посту гляньте.
В здравом уме конечно такое применять не советую. Что до ответа, то компиллер вообще может заменит эту лабуду на более простое, типо i + 3, Парсит компилятор, а ему по фигу он просто разбирает выражение и меняет его на более пристойное, а по семантике 3 и выходит, то есть: 1) 0+1-0 2)++ 3)++ А вообще вот цитата из одной книженции:
t00x Ну если на это есть стандарт, то снимаю шляпу, но imho это опять UB. Хотя возможно книга древняя, до принятия стандарта.
Booster данное выражение интерпретируется всеми компиляторами языка Си одинаково даже без скобок и без стандартов, по правилам приоритетности операций для Си. и тем более со скобками.
t00x А побочных эффектов не существует? Вот из ещё одного учебника. И у Фуера тоже всколзь об этом есть. Лично мне такие выражения не кажутся однозначными. Как ты интерпретируешь сабжевое выражение, и считаешь ли ты эту интерпретацию единственно верной?
Booster Как сказал Icegenerator, это UB, вот что генерит мс-компилер с настройками по умолчанию: Код (Text): main() { int i = 2; int j = 6; printf("%d\n", i*j + j++ + --i); } asm: mov DWORD PTR _i$[ebp], 2 ; i = 2 mov DWORD PTR _j$[ebp], 6 ; j = 6 mov eax, DWORD PTR _i$[ebp] sub eax, 1 mov DWORD PTR _i$[ebp], eax mov ecx, DWORD PTR _i$[ebp] imul ecx, DWORD PTR _j$[ebp] add ecx, DWORD PTR _j$[ebp] add ecx, DWORD PTR _i$[ebp] [+] Интересная ссылка: http://alenacpp.blogspot.com/2005/08/unspecified-behavior-undefined.html
t00x Ладно, давай детально. Начнём с того что это не математика, а алгоритм вычисления выражения ввиде грамматики. Причём алгоритм сложный (точно не элементарный). Разбирает грамматику компилятор, а как он её интерпретирует мы точно не знаем. Сначала выполняется префиксная операция ++i, только после этого оно участвует в вычислении. Но откуда уверенность что ++i - i++ даст единицу, а не ноль, ведь i уже равно 1. Насколько мне известно определённое поведение не специфицировано. Об этом трубиться во многих учебниках, цитаты из которых я привёл.