C++ – Understanding Sequence Points from Function Calls

c++sequence-pointsundefined-behavior

This is yet another sequence-point question, but a rather simple one:

#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;
}

Is this undefined behaviour? Or does the call to g(&p) act as a sequence point?

Best Answer

No. It doesn't invoke undefined behavior. It is just unspecified, as the order in which the function arguments are evaluated is unspecified in the Standard. So the output could be 0 or 42 depending on the evaluation order decided by your compiler.