在我的印象中,后增量(或预增量)只能在等号(=)的右边进行。但我可以编译下面的代码。
你能帮助我理解这段代码吗,尤其是下面这行。
来源: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;
如果数据8等于0x20,则是否等于:
*(0x20) = -*(0x20);
或
*(0x20) = -*(0x24);
因为没有办法做出这个决定(因为您在读取变量两次的同时编辑了一个变量,没有交错的序列点),所以这是未定义的行为。
不过,我们可以讨论下面这段代码的作用。这很可能是上述代码的目的。
while( data8 != data8End ) {
*data8 = -*data8;
data8++;
}
希望你在这里所做的更直接。你拿着你的输入数组,看它,它是一个8位数字序列。然后,在适当的地方,你否定每一个。