Вопросы по теме 'type-punning'
Что такое строгое правило псевдонима?
На вопрос о общем неопределенном поведении в C люди иногда ссылаются на строгое правило псевдонима. О чем они говорят?
232458 просмотров
schedule
08.05.2022
Нарушает ли простое приведение для выполнения необработанной копии переменной строгое сглаживание?
Я читал о строгом использовании псевдонимов . в последнее время очень много. Стандарты C/C++ говорят, что следующий код недействителен (неопределенное поведение, чтобы быть правильным), поскольку компилятор может иметь значение a где-то в кэше...
412 просмотров
schedule
12.02.2024
Портативная переинтерпретация данных
Я хочу переинтерпретировать данные одного типа как другого типа переносимым способом (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 просмотров
schedule
16.08.2022
Повторное использование буфера с плавающей запятой для двойных значений без неопределенного поведения
В одной конкретной функции C++ у меня есть указатель на большой буфер с плавающей запятой, который я хочу временно использовать для хранения половины числа удвоений. Есть ли способ использовать этот буфер в качестве временного пространства для...
1213 просмотров
schedule
05.08.2022
Строгое правило совмещения и смещение типов в C ++
Я пытаюсь понять неопределенное поведение при нарушении строгого правила псевдонима. Я прочитал много статей о SO, чтобы понять это. Однако остается один вопрос: я не очень понимаю, когда два типа нелегальных псевдонимов. cpp-reference...
508 просмотров
schedule
14.04.2024
Можно ли связать память одной структуры с другой в Rust?
Я знаю, что в Rust компилятор не гарантирует, что вы получите данные структуры в том порядке, в котором вы их объявили, чтобы сэкономить память (я также полагаю, что некоторые оптимизаторы кода C делают то же самое). Предположим, теперь у меня есть...
430 просмотров
schedule
03.08.2022
Можно ли использовать указатель на член структуры для доступа к другому члену той же структуры?
Я пытаюсь понять, как работает каламбур, когда дело доходит до сохранения значения в члене структуры или объединения.
Стандарт 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 просмотров
schedule
10.04.2024
Является ли доступ к 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