我的印象是,后增量(OR preincrement)只能在相等(=)的右侧进行.但我能够编译下面的代码.
你能帮助我理解这个特定的代码,特别是在线下.
来源: http://www.ibm.com/developerworks/library/pa-dalign/
你能帮助我理解这个特定的代码,特别是在线下.
来源: http://www.ibm.com/developerworks/library/pa-dalign/
*data8++ = -*data8; void munge8( void *data,uint32_t size ) { uint8_t *data8 = (uint8_t*) data; uint8_t *data8End = data8 + size; while( data8 != data8End ) { *data8++ = -*data8; } }
解决方法
所以,我很确定这是未定义的行为.除最终分号外没有序列点:
*data8++ = -*data8;
如果data8等于0x20,则它等于:
*(0x20) = -*(0x20);
要么
*(0x20) = -*(0x24);
因为没有办法做出这个决定,(因为你在读取变量时编辑了一个变量,没有交错序列点),这是未定义的行为.
while( data8 != data8End ) { *data8 = -*data8; data8++; }
原文地址:https://www.jb51.cc/c/120172.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。