我试图确定我对 C 中序列点的理解——只是想检查一些东西。目前,我认为 (1) 是未定义的,而 (2) 只是未指定的,基于在 (2) 中,在评估g
and的参数后存在序列点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
调用之前自由执行这两个增量 - 我从下面的答案中理解是,尽管我很感激确认是这种情况。