У Вас есть какие-либо страшные истории для сообщения? Руководство GCC недавно добавило предупреждение относительно - fstrict-искажение и бросок указателя через объединение: [...] Беря адрес, бросая получающееся...
Мне вызвали проблему путем нарушения строгого правила искажения указателя. У меня есть тип T, который прибывает из шаблона и некоторого Интервала целочисленного типа того же размера (как с sizeof). Мой код по существу делает...
Отвечая на вопрос о распространенном неопределенном поведении в Си, души более просвещенные, чем я, ссылались на строгое правило псевдонимов. О чем они говорят?
Следующий код нарушает строгий псевдоним? int a = 0; * ((int *) ((char *) & a)) = 1; Почему бы и нет? потому что мы в конечном итоге разыменовываем указатель на int с использованием int *, что является законным Почему да? так как ...
Я использовал следующую часть кода для чтения данных из файлов как часть большей программы. удвойте data_read (ФАЙЛ *поток, международный код) {символьные данные [8]; переключатель (код) {случай 0x08:...
Я пытаюсь исправить два предупреждения при компиляции конкретной программы с использованием GCC. Предупреждения: предупреждение: разыменование перфорированного указателя сломается.
правила строгого псевдонима [-Wstrict-aliasing] и ...
У меня есть следующий бит кода: #include <iostream> #include <список> #include <алгоритм> #include шаблон <iterator> <Итератор имени типа> пустое нечто (Итератор начинаются...
Насколько я понимаю, GCC поддерживает все свои функции C99 в C++. Но как строгое искажение C99 обрабатывается в коде C++? Я знаю, что кастинг с бросками C между несвязанными типами не строг-...
У меня есть вопрос о строгом псевдонимах и Clang оптимизации для одного примера. Давайте рассмотрим следующий пример (1): typedef void (* FTy) (void); FTy F = 0; (* Р) (); Это неопределенное поведение. ...
У меня есть следующая программа, в которой я, казалось бы, быстро инициализирую два буфера, приводя 8-битный буфер к 32- и 64-битным значениям. #include < stdio.h > #include < stdint.h > typedef ...
Я пытался понять строгие правила искажения, поскольку они относятся к символьному указателю. Здесь это указано: всегда предполагается, что символ* может относиться к псевдониму любого объекта. Хорошо так в...
Я использую Руководство Beej по Сетям и столкнулся с проблемой искажения. Он предлагает функцию для возврата или IPv4 или адреса IPv6 конкретной структуры: 1 пустое *get_in_addr (структура sockaddr...
В gcc-strict-aliasing-and-casting-through-a-union я спросил, были ли у кого-либо возникшие проблемы с объединением, каламбурящим через указатели. До сих пор ответ, кажется, номер, этот вопрос более широк:...
Когда приведение типов нарушает строгое правило псевдонимов в C и C ++, компилятор может оптимизировать таким образом, чтобы можно было распространять неправильное значение константы и разрешать доступ без выравнивания, что ...
Вслед за определенной проблемой, самоответом и комментариями к нему, я хотел бы понять, является ли это надлежащее решение, обходное решение/взлом или просто неправильно. А именно, я переписал код: T x =...;...
При ответе на другой вопрос я думал о следующем примере: освободите *p; неподписанный x = 17; утверждайте (sizeof (пусто*)> = sizeof (неподписанный)); * (неподписанный*)&p = 17;//(1) memcpy (&p, и...
Я не могу объяснить поведение выполнения этой программы: #include #include #include typedef char u8; typedef unsigned short u16; size_t f (u8 * keyc, ...
Предположим, что в моем коде я должен сохранить пустоту * как данные член и при необходимости приведите его к исходному указателю класса. Чтобы проверить его надежность, я написал тестовую программу (linux ubuntu 4.4.1 g ++ -...
Я ищу метод под названием addNewItem: (NSToolbarItem *) предмет или что-то подобное, что позволяет добавить программно созданный предмет на мою панель инструментов, но я не нашел его. Я хотел бы добавить...
Предположим, у меня есть образец исходного файла test.c, который я компилирую следующим образом: $ gcc -03 -Wall test.c выглядит примерно так .. /// CMP128 (x, y)
//
// аргументы
// x - любой указатель на 128-битный ...
Когда я компилирую этот пример кода с использованием g ++, я получаю это предупреждение: предупреждение: разыменование указателя типа-наказания нарушит правила строгого алиасинга [-Wstrict-aliasing] Код: #include < iostream > ...
Строгий псевдоним запрещает нам доступ к той же области памяти с использованием несовместимого типа. int * i = malloc (sizeof (int)); // при условии, что sizeof (int)> = sizeof (float) * i = 123; плавать * f = ...
Я использую код, в котором я использую enum * в int *. Примерно так: enum foo {...}
...
foo foobar;
int * pi = reinterpret_cast (& foobar); При компиляции кода (g ++ 4.1.2) я получаю ...
Мне нужен безопасный способ псевдонимов между произвольными типами POD, соответствующий ISO-C++11, явно учитывающий 3.10/10 и 3.11 n3242 или позже.
Здесь много вопросов о строгом алиасинге, большинство...
/ IEC 9899: TC2, стандарт говорит, что следуют следующие указатели 6.3.2.3 Указатель на объект или неполный тип может быть преобразован в указатель на другой объект или неполный тип. Если ...
Нарушает ли этот код строгое использование псевдонимов? структура {инт х;} а;
*(int*)&a = 3 Более абстрактно, допустимо ли приведение типов между разными типами, если примитивные операции чтения/записи относятся к типу ...
У меня есть функция, которая принимает unsigned long * и должна передать ее внешней библиотеке, которая принимает unsigned int *, и на этой платформе unsigned int / long имеют тот же размер. void UpdateVar (unsigned ...
I am trying to extract the bits from a float without invoking undefined behavior. Here is my first attempt: unsigned foo(float x)
{ unsigned* u = (unsigned*)&x; return *u;
} As I ...
При компиляции следующего кода с помощью gcc 4.7 (g++-mp-4.7 (GCC) 4.7.0, созданный с MacPorts на OS X) я получаю, казалось бы, противоречивые результаты. Компилятор не жалуется, когда я пытаюсь переинтерпретировать и...