Вопросы по теме 'strict-aliasing'
Исправление для разыменования указателя с типом, которое нарушает строгий псевдоним.
Я пытаюсь исправить два предупреждения при компиляции конкретной программы с использованием GCC. Предупреждения:
предупреждение: разыменование указателя с каламбуром типа нарушит правила строгого псевдонима [-Wstrict-aliasing]
и двумя...
68325 просмотров
schedule
06.03.2024
освободить/удалить объединение malloc/новый массив в C/C++
Я работал и рассматривал возможность использования профсоюза. Я отказался от этого, потому что дизайн действительно требовал структуры/класса, но в конечном итоге это привело к следующему гипотетическому вопросу:
Предположим, у вас есть союз,...
3598 просмотров
schedule
22.03.2023
Понимание квалификатора limited на примерах
Поведение ключевого слова restrict определено в C99 в 6.7.3.1:
Пусть D будет объявлением обычного идентификатора, который предоставляет средства для обозначения объекта P как указателя с ограничением на тип T.
Если D появляется внутри...
2753 просмотров
schedule
05.10.2023
Почему GCC и Clang не делают эту оптимизацию псевдонимов?
У меня есть случай , когда друг применяет объект небазового класса типа «Базовый» в объект типа класса «Производный», где «Производный» является производным классом «Базового» и добавляет только функции, но не данные. В приведенном ниже коде я...
1661 просмотров
schedule
20.04.2024
GCC: точность предупреждений о строгом псевдониме
Я пытаюсь проверить часть своего кода на предмет строгих нарушений псевдонима, но похоже, что я что-то пропустил, пытаясь понять правило строгого псевдонима.
Представьте себе следующий код:
#include <stdio.h>
int main( void )
{...
5099 просмотров
schedule
15.03.2022
Реализация Memcpy, строгое сглаживание
Изучая c, я реализовал свои собственные функции memcpy. Я использовал более широкий тип ( uint32_t ) в функции. (Для простоты функция ограничена типами, кратными 4, и данные правильно выровнены)
void memcpy4( void* dst , void* src , int size )...
1294 просмотров
schedule
02.06.2022
Нарушает ли доступ к массиву структуры POD как массиву ее единственного члена строгое сглаживание?
У меня есть целочисленные значения, которые используются для доступа к данным в несвязанных хранилищах данных, то есть дескрипторах. Я решил обернуть целые числа в структуру, чтобы иметь строго типизированные объекты, чтобы нельзя было перепутать...
549 просмотров
schedule
04.05.2024
Самое простое эмпирическое правило, чтобы не нарушать правила строгого псевдонима?
При прочтении еще одного вопроса о псевдонимах ( Что такое строгое правило псевдонима? ) и Это главный ответ, я понял, что все еще не полностью удовлетворен, хотя мне кажется, что я все это понял.
( Этот вопрос теперь помечен как C и C ++. Если...
726 просмотров
schedule
29.02.2024
Строгий псевдоним и указатель на поля объединения
У меня вопрос о строгих правилах сглаживания, объединениях и стандарте. Предположим, у нас есть следующий код:
#include <stdio.h>
union
{
int f1;
short f2;
} u = {0x1};
int * a = &u.f1;
short * b = &u.f2;
int...
585 просмотров
schedule
10.04.2022
Сборка fiware-IoTAgent-Cplusplus из исходного кода не удалась из-за ошибки строгого псевдонима.
Я пытаюсь собрать fiware-IoTAgent-Cplusplus из исходного кода, но получаю ошибку строгого псевдонима. Есть идеи?
Команды, которые я использовал для сборки, следующие.
Обратите внимание, что я строю внутри lxc, используя CentOS 6.7.
$source...
34 просмотров
schedule
11.12.2022
Создание недопустимой ссылки с помощью переинтерпретации приведения
Я пытаюсь определить, вызывает ли следующий код неопределенное поведение:
#include <iostream>
class A;
void f(A& f)
{
char* x = reinterpret_cast<char*>(&f);
for (int i = 0; i < 5; ++i)
std::cout << x[i];
}...
237 просмотров
schedule
14.03.2022
Соответствует ли стандарту совмещение указателей между агрегированными структурами C и их членами?
Является ли следующая программа C соответствующей стандартам (и по каким стандартам)? Если он не соответствует требованиям (нарушая строгое правило псевдонимов или иным образом), является ли он «безопасным» по отношению к GCC или любому другому...
62 просмотров
schedule
03.06.2024
Нарушение строгого сглаживания даже без приведения?
Думаю, я действительно спрашиваю: является ли псевдоним «транзитивным»? Если компилятор знает, что A может быть псевдонимом B, а B может быть псевдонимом C, то, конечно же, он должен помнить, что A, следовательно, может быть псевдонимом C. Возможно,...
102 просмотров
schedule
02.06.2022
Нарушает ли приведение массива символов к другому типу строгие правила псевдонимов?
Рассмотрим эти две функции:
int f1()
{
alignas(int) char buf[sizeof(int)] = {};
return *reinterpret_cast<int*>(buf);
}
int f2()
{
alignas(int) char buf[sizeof(int)] = {};
char* ptr = buf;
return...
803 просмотров
schedule
04.11.2023
Строго соответствует ли такое использование профсоюзов?
Учитывая код:
struct s1 {unsigned short x;};
struct s2 {unsigned short x;};
union s1s2 { struct s1 v1; struct s2 v2; };
static int read_s1x(struct s1 *p) { return p->x; }
static void write_s2x(struct s2 *p, int v) { p->x=v;}
int test(union...
821 просмотров
schedule
25.01.2023
С++ строгий независимый алиасинг
Я читал много QA о строгом псевдониме здесь, в Stack Overflow, но все они довольно распространены, и обсуждение всегда имеет тенденцию ссылаться на глубокие детали стандарта C ++, которые почти всегда трудно понять правильно. Особенно, когда...
423 просмотров
schedule
24.09.2023
C неопределенным поведением. Строгое правило алиасинга или неправильное выравнивание?
Я не могу объяснить поведение этой программы при выполнении:
#include <string>
#include <cstdlib>
#include <stdio.h>
typedef char u8;
typedef unsigned short u16;
size_t f(u8 *keyc, size_t len)
{
u16 *key2 = (u16 *) (keyc...
3966 просмотров
schedule
27.07.2023
Является ли использование результата new char[] или malloc для приведения float * UB (строгим нарушением псевдонимов)?
Какой из них имеет UB (в частности, который нарушает строгое правило псевдонимов)?
void a() {
std::vector<char> v(sizeof(float));
float *f = reinterpret_cast<float *>(v.data());
*f = 42;
}
void b() {
char *a = new...
535 просмотров
schedule
18.02.2023
Каково обоснование строгого правила псевдонимов?
В настоящее время меня интересует обоснование строгого правила псевдонимов. Я понимаю, что определенные псевдонимы не разрешены в C и что намерение состоит в том, чтобы разрешить оптимизацию, но я удивлен, что это было предпочтительным решением по...
192 просмотров
schedule
19.11.2023
Непоследовательные строгие правила псевдонимов
У меня есть следующая программа, в которой я инициализирую два буфера, казалось бы, быстрым способом, приводя 8-битный буфер к 32- и 64-битным значениям.
#include <stdio.h>
#include <stdint.h>
typedef struct {
uint32_t a[2];...
81 просмотров
schedule
06.05.2024