Я прочитал здесь, что есть точка последовательности:
После действия, связанного с спецификатором формата преобразования ввода/вывода. Например, в выражении
printf("foo %n %d", &a, 42)
имеется точка последовательности после вычисления%n
перед печатью42
.
Однако, когда я запускаю этот код:
int your_function(int a, int b) {
return a - b;
}
int main(void) {
int i = 10;
printf("%d - %d - %d\n", i, your_function(++i, ++i), i);
}
Вместо того, чего я ожидаю, я получаю:
12 - 0 - 12
Это означает, что не было точки последовательности, созданной для спецификатора формата преобразования. Является ли http://en.wikipedia.org неправильным или просто неправильно понял что-то или gcc несовместим в этом случае (кстати, Visual Studio 2015 дает тот же неожиданный результат)?
EDIT:
Я понимаю, что порядок аргументов your_function
оценивается и присваивается параметрам undefined. Я не спрашиваю о том, почему мой средний срок равен 0. Я спрашиваю, почему остальные два условия равны 12.