Вопрос

я посмотрел СО/МЭК 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top