C, доменные сокеты Unix, вспомогательные данные и GCC; Использование макроса CMSG_DATA - PullRequest
6 голосов
/ 09 февраля 2010

Как я могу это сделать:

*(int *)CMSG_DATA(hdr) = fd2pass;

Без повышения GCC это:

error: dereferencing type-punned pointer will break strict-aliasing rules

Совместимым с этими параметрами способом:

-Wall -Werror -pedantic

Ответы [ 2 ]

6 голосов
/ 05 января 2012

Если что-то не так, фактическое псевдоним не происходит - объект, на который ссылается * (int *) CMSG_DATA (hdr), не является псевдонимом для hdr - это конец hdr Предупреждение неверное.

Вы можете обойти это с memcpy:

memcpy(CMSG_DATA(hdr), &fd2pass, sizeof(int));

Не использовать -fno-strict-aliasing: отключает оптимизации, предполагающие строгое псевдонимы; он может генерировать значительно худший код.

Технические подробности см. Ошибка glibc 16197 .

0 голосов
/ 09 февраля 2010

Попробуйте передать -fno-strict-aliasing в gcc.

Чтобы пролить свет на тему строгого алиасинга, отметьте этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...