Вопросы по теме 'type-punning'

Что такое строгое правило псевдонима?
На вопрос о общем неопределенном поведении в C люди иногда ссылаются на строгое правило псевдонима. О чем они говорят?
232458 просмотров

Нарушает ли простое приведение для выполнения необработанной копии переменной строгое сглаживание?
Я читал о строгом использовании псевдонимов . в последнее время очень много. Стандарты C/C++ говорят, что следующий код недействителен (неопределенное поведение, чтобы быть правильным), поскольку компилятор может иметь значение a где-то в кэше...
412 просмотров

Портативная переинтерпретация данных
Я хочу переинтерпретировать данные одного типа как другого типа переносимым способом (C99). Я не говорю о приведении, я хочу реинтерпретацию некоторых заданных данных. Кроме того, под переносимым я подразумеваю, что он не нарушает правила C99...
3036 просмотров
schedule 10.11.2023

Наследование от базового класса, экземпляры которого находятся в фиксированном формате (база данных, MMF), как быть в безопасности?
( Примечание. Я ищу действительно любые предложения по правильным условиям поиска, чтобы прочитать об этой категории вопросов. "Object-relational-mapping" показался мне местом, где я мог бы найти хороший предшествующий уровень техники... но я не...
223 просмотров
schedule 12.07.2023

Не определено ли в C99 прокалывание типов через объединение, и стало ли оно определено в C11?
Несколько ответов на вопрос о переполнении стека Получение IEEE Single- биты точности для числа с плавающей запятой предлагают использовать структуру union для обозначения типов (например: преобразование битов float в uint32_t ): union {...
10121 просмотров
schedule 02.02.2023

«Небезопасная» функция С# — *(с плавающей запятой*)(&результат) против (с плавающей запятой)(результат)
Может ли кто-нибудь объяснить простым способом приведенные ниже коды: public unsafe static float sample(){ int result = 154 + (153 << 8) + (25 << 16) + (64 << 24); return *(float*)(&result); //don't know what...
2959 просмотров
schedule 09.04.2024

зарезервированное значение указателя, отличное от NULL
Как я могу создать зарезервированное значение указателя? Контекст таков: я думал о том, как реализовать структуру данных для динамического языка сценариев (я не планирую это реализовывать - просто интересно, как это будет сделано). Строки могут...
766 просмотров
schedule 06.01.2023

Безопасная и эффективная подстановка типов в C ++
uint32_t Seed() { uint64_t seed = GetSomeReasonable64BitIntegerSeed(); return *(uint32_t*)&seed ^ *((uint32_t*)&seed + 1); } Выше не настоящий код, но это в основном то, что делает настоящий код. Я получил предупреждение от g ++...
281 просмотров
schedule 31.08.2023

Четко ли определен этот тип каламбура?
Читая цитату в этом ответе о строгом правиле псевдонимов, я вижу следующее для C ++ 11: Если программа пытается получить доступ к сохраненному значению объекта через glvalue, отличный от одного из следующих типов, поведение не определено:...
507 просмотров
schedule 05.06.2022

Является ли доступ к представлению объекта с помощью конструктора string_view(const char*, size_type) определенным псевдонимом char или неопределенным поведением?
Пусть у нас есть этот объект constexpr uint64_t lil_endian = 0x65'6e'64'69'61'6e; // 00en dian // a.k.a. Clockwise Rotated Endian which allocates like // char[8] = { 'n','a','i','d','n','e','\0','\0' } Считается, что memcpy также...
83 просмотров

Повторное использование буфера с плавающей запятой для двойных значений без неопределенного поведения
В одной конкретной функции C++ у меня есть указатель на большой буфер с плавающей запятой, который я хочу временно использовать для хранения половины числа удвоений. Есть ли способ использовать этот буфер в качестве временного пространства для...
1213 просмотров
schedule 05.08.2022

Строгое правило совмещения и смещение типов в C ++
Я пытаюсь понять неопределенное поведение при нарушении строгого правила псевдонима. Я прочитал много статей о SO, чтобы понять это. Однако остается один вопрос: я не очень понимаю, когда два типа нелегальных псевдонимов. cpp-reference...
508 просмотров

Можно ли связать память одной структуры с другой в Rust?
Я знаю, что в Rust компилятор не гарантирует, что вы получите данные структуры в том порядке, в котором вы их объявили, чтобы сэкономить память (я также полагаю, что некоторые оптимизаторы кода C делают то же самое). Предположим, теперь у меня есть...
430 просмотров

Можно ли использовать указатель на член структуры для доступа к другому члену той же структуры?
Я пытаюсь понять, как работает каламбур, когда дело доходит до сохранения значения в члене структуры или объединения. Стандарт N1570 6.2.6.1(p6) определяет, что Когда значение хранится в объекте типа структуры или объединения, в том числе...
166 просмотров
schedule 05.04.2022

Переинтерпретация правильно выровненных указателей на объект с объявленным типом
Стандарт позволяет нам приводить указатели на типы объектов друг к другу, если они соответствующим образом выровнены. 6.3.2.3(p7) : Указатель на тип объекта может быть преобразован в указатель на другой тип объекта. Если результирующий...
70 просмотров
schedule 08.06.2024

Надежное определение типов в соответствии со стандартами C и C++
Есть ли способ ввести каламбур, который действителен как в C, так и в C++? Предпочтительно низкие накладные расходы и избегание тривиальных взломов препроцессора. В C89 я знаю, что могу сделать что-то вроде этого: unsigned int float_bits(float...
201 просмотров

Является ли доступ к int как unsigned long неопределенным поведением?
В книге под названием Programming Windows в одном из примеров у нас есть эта строка: ReadFile (hFile, buffer, MAXREAD, &i, NULL) ; i здесь было ранее объявлен как int , но 4-й аргумент ReadFile  – это LPDWORD , что является...
116 просмотров
schedule 03.07.2023

Преобразование порядка байтов без использования неопределенного поведения
Я использую C для чтения файла изображения .png , и если вы не знакомы с форматом кодирования PNG , полезные целочисленные значения кодируются в файлах .png в виде 4-байтовых целых чисел с прямым порядком байтов. Мой компьютер - это машина с...
154 просмотров
schedule 11.07.2022

Как узнать, можно ли набирать текст на моей платформе?
У меня есть куча кода, принимающего двоичные капли из сети. Зная тип капли, я до сих пор использовал каламбур (псевдо): uint8_t* data = network.get(); if(type == "A") { uint32_t* var = reinterpret_cast<uint32_t*>(data); ... } else if...
207 просмотров
schedule 22.01.2023