Используемый компилятор: gcc 8.2
Командная строка: -Wall
Мое текущее понимание нарушения точки последовательности - это код, который каким-то образом зависит от порядка вычисления операндов / подвыражений вданное выражение.Это так, потому что порядок вычисления операндов в выражении не определен, как отмечено здесь .Таким образом, такой код:
a = 5;
b = a + ++a;
является нарушением и перехватывается -последовательностью , поскольку в результате имеется неоднозначность, т. Е. Должно быть (5 + 6) или (6 + 6)Я думаю, что в приведенном ниже коде есть аналогичная неоднозначность, так как мы не можем знать, будет ли 2-й ++ a оцениваться до 1-го:
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
int use()
{
int min;
int a = 4, b = 5;
min = MIN(++a, b);
//min = ((++a) < b) ? (++a) : b;
return min;
}
Я явно что-то упускаю, так как этот код не предупреждает меня о -Wseqeuence-точка .Может кто-нибудь, пожалуйста, помогите мне понять, что?Обратите внимание, что я специально определил MIN как есть.