首页 > 解决方案 > 为什么三元运算可能未定义

问题描述

使用 GNU/GCC

使用此代码:

static uint8_t write_idx=0;
write_idx = write_idx==127 ? 0 : ++write_idx;

我收到这个警告:

warning: operation on 'write_idx' may be undefined [-Wsequence-point]

你知道是什么产生了这个警告吗?

编辑 :

write_idx = write_idx==127 ? 0 : write_idx+1;

相同的行为但没有警告谢谢@pmg

标签: cconditional-operator

解决方案


这可以简化为:

write_idx = ++write_idx;

编译器会发出警告,因为有两个地方写入write_idx没有序列点。这意味着该标准没有定义应该发生什么。

也许您不知道++预增量运算符会修改变量,而您想改为这样写:

write_idx = write_idx==127 ? 0 : write_idx + 1;

推荐阅读