*f2 += *f2 += a += 2.5;
Эта строка имеет Неопределенное поведение , поскольку вы изменяете значение *f2
(т. Е. a
) более одного раза в одном выражении без промежуточной точки последовательности. UB означает, что ваша программа может напечатать «Hello World», может произойти сбой, она может напечатать 12 12 12
или 12 12 1029
, или она может начать пожирать ваши мозги. Не полагайтесь на неопределенное поведение.
Цитировать стандарт C ++ (я знаю, что вопрос помечен буквой C, но у меня нет стандарта C, и я знаю, что в C действует то же правило)
За исключением отмеченных случаев, порядок вычисления операндов отдельных операторов и подвыражений отдельных
выражения и порядок, в котором происходят побочные эффекты, не определены.53) Между предыдущими
и в следующей точке последовательности скалярный объект должен иметь сохраненное значение, измененное не более одного раза в результате оценки
выражения. Кроме того, предварительное значение должно быть доступно только для определения значения, которое будет сохранено.
Требования этого параграфа должны выполняться для каждого допустимого порядка подвыражений полного
выражение; в противном случае поведение не определено .