为什么*foo ++ =*++ foo可能未定义?

Jac*_*ack 2 c gcc pointers

它应该将当前字符设置为下一个字符.例如:

while( *foo ) { 
 if(baa(*foo)) *foo++ = *++foo;
  foo++;
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error: operation on ‘foo’ may be undefined [-Werror=sequence-point]
cc1: all warnings being treated as errors
Run Code Online (Sandbox Code Playgroud)

任何人都能解释为什么吗?那是无效的C语法?

rua*_*akh 6

你在foo赋值的两边递增,两者之间没有序列点.这是不允许的; 您只能在序列点之间修改一次值.