Я пытаюсь определить свое понимание точек следования в C - просто хотел кое-что проверить. В настоящее время я считаю, что (1) не определено, тогда как (2) просто не определено, на основании того, что в (2) есть точки последовательности после оценки аргументов для g
и h
(поэтому мы не изменяем i
дважды между точки последовательности), но порядок оценки аргументов f
по-прежнему не указан. Правильно ли я понимаю?
#include <stdio.h>
int g(int i) {
return i;
}
int h(int i) {
return i;
}
void f(int x, int y) {
printf("%i", x + y);
}
int main() {
int i = 23;
f(++i, ++i); // (1)
f(g(++i), h(++i)); // (2)
return 0;
}
РЕДАКТИРОВАТЬ:
Кажется, ключевым моментом здесь является то, может ли компилятор выполнять оба приращения до вызова g
или h
- насколько я понимаю из приведенных ниже ответов, это так, хотя я был бы признателен за подтверждение того, что это так.