为什么三元运算可能未定义
Why ternary operation may be undefined
与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
这可以简化为:
write_idx = ++write_idx;
编译器发出警告,因为有两个地方写入 write_idx
没有序列点。这意味着标准没有定义应该发生什么。
也许您不知道 ++
预自增运算符会修改变量,而您想改为这样写:
write_idx = write_idx==127 ? 0 : write_idx + 1;
与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
这可以简化为:
write_idx = ++write_idx;
编译器发出警告,因为有两个地方写入 write_idx
没有序列点。这意味着标准没有定义应该发生什么。
也许您不知道 ++
预自增运算符会修改变量,而您想改为这样写:
write_idx = write_idx==127 ? 0 : write_idx + 1;