порядок вычисления подвыражений
Вопрос
я посмотрел СО/МЭК 9899:201x согласно J.1 Неопределенное поведение:
"The order in which subexpressions are evaluated and the order in which side effects
take place, except as specified for the function-call (), &&, ||, ?:, and comma
operators (6.5)."
Означает ли это, что в
func1() + func2();
func2() может быть предварительно сформирован перед func1() или даже во время func1() ?
Решение
В текущем стандарте (ISO/IEC 9899:1999) существует точка последовательности между вызовами функций, но порядок вычисления операндов +
так не указано func1
может быть вызван до или после func2
но вызовы функций не должны перекрываться или каким-либо образом чередоваться.
Это означает, что каждый из func1
и func2
может, при желании, взаимодействовать с некоторыми общими данными без изменения этих данных неожиданным образом.
Другие советы
Не во время, но обязательно: либо 1, затем 2, либо 2, затем 1.
Не связан с StackOverflow