与printf中的序列点一起使用时,i的未定义值

Raj*_*esh 3 c mingw

我在看序列点操作.在下面的代码中,i的值打印为1.但是我收到"在i上操作未定义"的警告消息.我当时认为虽然&运算符不是序列点,但是函数调用printf被认为是一个序列点,因此在%d期间我被完全评估.但为什么操作未定义?

int i = 0;
if((i++) & printf("i = %d\n",i))
{
    // Something
}
else
{
    // some code here
}
Run Code Online (Sandbox Code Playgroud)

Art*_*Art 5

函数调用是一个序列点,但在函数调用之前计算函数的参数.因此i++,i作为printf的一个论据是没有顺序的.