У меня есть простое тестирование функции, если два массива обращены друг к другу.
Они кажутся идентичными, за исключением переменной tmp
. Один работает, другой нет. Я не могу понять, почему компилятор оптимизировал бы это - если это действительно проблема оптимизации (мой компилятор - IAR Workbench v4.30.1). Вот мой код:
// this works as expected
uint8 verifyInverseBuffer(uint8 *buf, uint8 *bufi, uint32 len)
{
uint8 tmp;
for (uint32 i = 0; i < len; i++)
{
tmp = ~bufi[i];
if (buf[i] != tmp)
{
return 0;
}
}
return 1;
}
// this does NOT work as expected (I only removed the tmp!)
uint8 verifyInverseBuffer(uint8 *buf, uint8 *bufi, uint32 len)
{
for (uint32 i = 0; i < len; i++)
{
if (buf[i] != (~bufi[i]))
{
return 0;
}
}
return 1;
}
Первая версия кода работает, вторая - нет. Кто-нибудь может понять, почему? Или прийти с некоторыми тестами, чтобы выяснить, что не так?