Описание тега offsetof

Все, что связано с макросом C и C++ ʻoffsetof`. ʻOffsetof` используется для определения смещения в байтах элемента структуры от начала самой структуры.
2 ответа

Инвертировать указатель на член (т.е. получить адрес содержащей структуры)

У меня есть структура (Member), которую можно использовать только в качестве члена данных в какой-либо другой структуре (Container). По соглашению имя члена всегда m. Есть ли надежный способ для члена получить адрес содержащей структуры? template&lt…
26 фев '15 в 11:00
3 ответа

Почему offsetof(member) равен sizeof(struct)?

У меня есть структура, определенная как: struct smth { char a; int b[]; }; Когда я звоню sizeof а также offsetof на этой структуре: cout << sizeof(struct smth) << endl; cout << offsetof(struct smth, b) << endl; Выход: 4 4 Поч…
17 авг '13 в 15:13
0 ответов

Доступ к переменной-члену через родительский класс и смещение

Я поставил тег language lawyerХотя у меня есть ощущение, что это не с той стороны стандартной границы. Я не видел разговора именно по этому вопросу, но у меня был на работе, поэтому я хотел бы иметь определенную уверенность в этом. Проблема заключае…
2 ответа

Как переносить выделение пространства для конкретного члена объединения, встроенного в структуру

Рассмотрим следующий тип в C11, где MyType1 и MyType2 являются ранее объявленными типами: typedef struct { int tag; union { MyType1 type1; MyType2 type2; } } MyStruct; Я хотел бы выделить достаточно памяти, используя malloc держать tag атрибут и typ…
16 янв '15 в 10:06
2 ответа

Зачем вычитать нулевой указатель в offsetof()?

Linux stddef.h определяет offsetof() как: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) в то время как статья в Википедии о offsetof() ( http://en.wikipedia.org/wiki/Offsetof) определяет это как: #define offsetof(st, m) \ ((s…
02 апр '10 в 19:18
1 ответ

Получить адрес не POD-объекта из элемента данных, который является вложенным классом одноразового использования

Я начну с некоторого кода: class myNonPODClass { public: virtual ~myNonPODClass() {} class { public: myNonPODClass* GetContainer() { return (myNonPODClass*)((int8_t*)(this) - offsetof(myNonPODClass, member)); } } member; }; Очевидно, это надуманный …
08 авг '12 в 01:33
1 ответ

GCC, я могу использовать offsetof() с шаблонным указателем на член?

Код ниже находится здесь: https://ideone.com/XnxAyw Я получаю ошибку компилятора: prog.cpp: In member function ‘size_t list_base<T, NODE, true>::offset()’: prog.cpp:26:22: error: expected unqualified-id before ‘*’ token return offsetof(T, *NOD…
12 мар '14 в 17:37
3 ответа

&((имя структуры *)NULL -> b) в выражении printf

Я нашел этот пример кода в книге, но не могу понять выражение в выражении printf. и эта программа успешно компилирует, выдавая вывод 4. любезно советую... void main(){ unsigned char c; typedef struct name { long a; int b; long c; }r; r re = {3,4,5};…
13 ноя '14 в 09:10
1 ответ

Правильное использование смещения макроса

Я пытаюсь работать с offsetof макрос следующим образом: typedef unsigned char u8; typedef unsigned short u16; struct MapBlock { u16 type : 10; u8 variant : 3; bool isTop : 1; }; struct MapTile { struct MapBlock top, middle; u16 x; u8 y; }; MapTile *…
03 мар '12 в 17:23
1 ответ

Печать смещений всех элементов структуры

Мое намерение состоит в том, чтобы вывести список со смещением всех членов структуры из typedef struct, В моем случае эта структура хранится во внешней EEPROM, к которой можно получить доступ через байты через интерфейс, доступный через последовател…
17 дек '13 в 09:24
3 ответа

Получение каждого offsetParent или общего значения offSetTop и общего значения offSetLeft

Я хочу получить общее значение offSetTop и общее значение offSetLeft дочернего элемента, которые имеют многоуровневый родительский элемент и могут суммироваться. Это какой-то сокращенный способ, кроме добавления одного за другим вручную?
07 янв '12 в 06:15
4 ответа

Переменная-член класса C++, знающая свое смещение

Можно ли иметь переменную-член, которая сможет рассчитывать указатель на содержащий объект из указателя на себя (в его методе)? Давайте создадим интерфейс внешнего вызова в API следующим образом: template <typename Class, MethodId Id, typename Si…
08 фев '11 в 18:45
1 ответ

Указатель на член, дескрипторы типов и ссылки

Я работаю над проектом дескриптора типа в C++11. Работа дескриптора типа заключается в том, чтобы знать типы каждого члена класса, его размер и смещение от основания объекта. Я не поддерживаю множественное наследование, а также объекты с виртуальным…
03 дек '11 в 17:13
3 ответа

Есть ли в C++11 портативный и эффективный способ доступа к вложенному классу из вложенного класса?

То, что мне нужно, можно сделать, сохранив this указатель включения класса во вложенный класс, например, так: class CEnclosing { public: class CNested : public CSomeGeneric { public: CNested(CEnclosing* e) : m_e(e) {} virtual void operator=(int i) {…
01 фев '14 в 13:44
3 ответа

C++ reinterpret_cast целое число

Я наткнулся на следующий код C++: #define OFFSETOF_MEMBER(t, f) \ (reinterpret_cast<uintptr_t>(&reinterpret_cast<t*>(16)->f) - static_cast<uintptr_t>(16u)) // NOLINT где t это тип, f это имя поля. Интересно, почему мы можем …
18 июл '18 в 06:33
2 ответа

Использование offsetof для шаблонных классов

Из стандарта C++: Класс стандартного макета - это класс, который: - не имеет нестатических членов-данных типа нестандартного класса макета (или массива таких типов) или ссылки, - не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.…
1 ответ

Смещения элементов структуры во время компиляции или с использованием IDE

Как я могу узнать, как все члены структуры расположены внутри? Мне нужен подробный список со всеми смещениями и размерами. Есть ли какой-нибудь плагин для IDE, я использую Visual Studio 2013? Я не могу использовать смещение или что-то подобное, пото…
27 авг '17 в 16:46
2 ответа

Синтаксическая ошибка Visual Studio в offsetof()

У меня есть тип: typedef struct { int x; int y; int z; } sdf_test_t; Но когда я пытаюсь скомпилировать следующее: offset = offsetof(sdf_test_t, z); Visual Studio отвечает: c:\dataflash.c(542) : error C2143: syntax error : missing ')' before 'type' c…
3 ответа

Почему смещение макроса необходимо?

Я новичок в языке C и только что узнал о структурах и указателях. Мой вопрос связан с offsetof макрос я недавно видел. Я знаю, как это работает и какая логика стоит за этим. в <stddef.h> подать определение следующим образом: #define offsetof(t…
07 фев '16 в 21:14
1 ответ

Макрос с приведением типов в C, Детальное изучение offsetof

Следующий код и его вывод: #include <stdio.h> int x = 0; #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)x)->MEMBER) #define offsetof_1(TYPE, MEMBER) ((size_t) &((TYPE *)1)->MEMBER) #define offsetof_2(TYPE, MEMBER) ((size_t) &…
10 ноя '13 в 02:22