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

标签 c pointers gcc

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

while( *foo ) { 
 if(baa(*foo)) *foo++ = *++foo;
  foo++;
}

但是我得到以下错误:

error: operation on ‘foo’ may be undefined [-Werror=sequence-point]
cc1: all warnings being treated as errors

谁能解释一下这是为什么?那不是有效的 C 语法?

最佳答案

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

关于c - 为什么 *foo++= *++foo 可能未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9951993/

相关文章:

c - 排序链接列表在 C 中无法正常工作

c - 如何使用自定义类型进行 malloc()?

c++ - 我如何访问一个指针子类方法,那些方法是子类独有的?

python - 如何使用gcc在windows for linux上进行跨平台编译?

c - 如果我排除库和编译器扩展,C 中还剩下什么?

c - 为什么 scanf() 会导致此代码中的无限循环?

c - GCC 程序集输出 : Get variables declared 'extern'

c++ - 如果 GCC 构建选项带有 '-mms-bitfields' ,则 'epoll_event.data.u64' 值可以通过 'epoll_wait' 截断为 4 字节值

c++ - 在 C89 和 C++ 中用空参数调用宏真的是未定义的行为吗?

C:指针和数组