Раньше я думал, что в C99, даже если побочные эффекты функций f
и g
мешали, и хотя выражение f () + g ()
не содержит точки последовательности, f
и g
будет содержать некоторые из них, поэтому поведение будет неопределенным: либо f () будет вызываться перед g (), либо g () перед f ().
Я больше в этом не уверен. Что, если компилятор встраивает функции (что компилятор может решить сделать, даже если функции не объявлены inline
), а затем переупорядочивает инструкции? Можно ли получить результат, отличный от двух вышеупомянутых? Другими словами, является ли это неопределенным поведением?
Это не потому, что я намереваюсь писать такие вещи, а для того, чтобы выбрать лучший ярлык для такого оператора в статическом анализаторе.