c - 为什么三元运算可能未定义
问题描述
使用 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;
推荐阅读
- java - 从通过 singleSnapshot 获取值的类对象中使用 getter 函数时出现问题。安卓,Java
- javascript - 为什么在 script 标签中设置 async 或 defer 时无法执行 Javascript 代码?
- tesseract - Tesseract tesstrain.sh 找不到字体
- angular - 如何在角度传单地图上将 GeoJson 特征属性显示为标签?
- amazon-web-services - 如何以编程方式获取实例类型的内存/cpu 值?
- javascript - 如何使用 Javascript 将图像质量转换为黑白
- javascript - 如何在 WordPress 中实现 EasyPay 巴基斯坦支付网关?
- javascript - Blockly:代码生成期间对子块的类型检查
- ruby-on-rails - Rails 活动记录关系类别和子类别
- javascript - 当单击该行中的链接时,如何存储/访问表(el-table)中的特定行数据并在对话框中显示(不警告)?