LINUX.ORG.RU

История изменений

Исправление Shadow1251, (текущая версия) :

Стандарт не гарантирует порядок вычисления аргументов, он implementation defined. Когда ты делаешь

int a = 1;
foo(a, ++a);

, то возможны два варианта:

1. сначала вычислится ++a и на фрэйм стэка вызванной функции ляжет 2 и 2

2. сначала будет вычислен и передан первый аргумент a(=1), а потом ++a(=2)

ISO International Standard ISO/IEC 14882:2014
1.9.15
If a side effect on a scalar
object is unsequenced relative to either another side effect on the same scalar object or a value computation
using the value of the same scalar object, the behavior is undefined.

Исходная версия Shadow1251, :

Стандарт не гарантирует порядок вычисления аргументов, он implementation defined. Когда ты делаешь

int a = 1;
void foo(a, ++a);

, то возможны два варианта:

1. сначала вычислится ++a и на фрэйм стэка вызванной функции ляжет 2 и 2

2. сначала будет вычислен и передан первый аргумент a(=1), а потом ++a(=2)

ISO International Standard ISO/IEC 14882:2014
1.9.15
If a side effect on a scalar
object is unsequenced relative to either another side effect on the same scalar object or a value computation
using the value of the same scalar object, the behavior is undefined.