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