я заметил следующий код на Understanding Strict Aliasing:Что такое «ложный позитив»?
uint32_t
swap_words(uint32_t arg)
{
U32* in = (U32*)&arg;
uint16_t lo = in->u16[0];
uint16_t hi = in->u16[1];
in->u16[0] = hi;
in->u16[1] = lo;
return (in->u32);
}
По мнению автора,
выше источника при компиляции с GCC 4.0 с -Wstrict ступенчатости = 2 флаг включен воли сгенерировать предупреждение. Это предупреждение является примером ложных положительных. Этот тип литья разрешен и будет генерировать соответствующий код (см. Ниже). ясно зафиксировано, что -Wstrict-aliasing = 2 может возвращать false положительных результатов.
Интересно, что это ложноположительный, и я должен обратить на это внимание, когда сглаживание переменных?
Вот "соответствующий код (см ниже)" уже упоминалось выше, если оно соответствует:
Собран с -fstrict-aliasing -O3 -Wstrict-aliasing -std=c99
на версии GNU C 4.0.0 (Apple Computer, Inc. построить 5026) (PowerPC -apple-darwin8),
swap_words:
stw r3,24(r1) ; Store arg
lhz r0,24(r1) ; Load hi
lhz r2,26(r1) ; Load lo
sth r0,26(r1) ; Store result[1] = hi
sth r2,24(r1) ; Store result[0] = lo
lwz r3,24(r1) ; Load result
blr ; Return
«Ложный положительный» - это причудливый способ сказать «ошибка инструмента». В этом случае ошибки компилятора, которые дают неверные диагностические сообщения. – Lundin