Строгое нарушение псевдонимов: почему gcc и clang генерируют разные результаты?

-2
задан Jaehyuk Lee 18 January 2019 в 08:09
поделиться

1 ответ

Почему мы можем сказать, что bar не нарушает правило строгого алиасинга?

Если код, вызывающий bar, не нарушает строгое алиасинг, bar тоже не будет нарушать строгое алиасинг. .

Позвольте мне привести пример.

Предположим, мы называем bar следующим образом:

int x;
long y;
bar(&x, &y);

Строгое алиасирование требует, чтобы два указателя разных типов не ссылались на одну и ту же память. & amp; x и & amp; y - это разные типы, и они относятся к разной памяти. Это не нарушает строгий псевдоним.

С другой стороны, скажем, мы называем это так:

long y;
bar((int *) &y, &y);

Теперь мы нарушили строгий псевдоним. Тем не менее, нарушение является ошибкой вызывающего абонента.

0
ответ дан Nick ODell 18 January 2019 в 08:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: