意外的C行为

mbo*_*ouz 2 c compiler-warnings

我试图理解为什么我的程序不会编译,

int myfunction(int x)
{
   return x;
} 

int main(){
  int x = 10;
  int result=0;
  result=myfunction(x) * myfunction(++x);
  printf("Result is = %d", result);
}
Run Code Online (Sandbox Code Playgroud)

执行后我得到:警告被视为错误在函数'int main()'中:'x'上的操作可能是未定义的.有人有想法吗?

Luc*_*ore 5

myfunction(x) * myfunction(++x)未定义,因为operator *未指定两个参数的评估顺序.因此,可以首先执行第一次或第二次调用,这意味着理论上x或者++x可以首先评估,这可能导致不同的结果.理论上.在实践中,标准只是责任你不要这样做.