luc*_*rod 7 c c++ undefined-behavior sequence-points
这是另一个序列点问题,但是一个相当简单的问题:
#include <stdio.h>
void f(int p, int) {
printf("p: %d\n", p);
}
int g(int* p) {
*p = 42;
return 0;
}
int main() {
int p = 0;
f(p, g(&p));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是未定义的行为吗?或者调用g(&p)充当序列点?
不.它不会调用未定义的行为.它只是未指定,因为在标准中未指定评估函数参数的顺序.因此输出可以是0或42取决于编译器决定的评估顺序.