реклама на сайте
подробности

 
 
> Положение поля в классе
Ivan.
сообщение Oct 9 2008, 05:48
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 13-02-07
Пользователь №: 25 325



Как получить Offset поля в классе?
Впринципе это вопрос общего назначения, но для уточнения, я пишу под WinAVR.
При применении ассемблерных вставок в C++ для работы со структурами появляется необходимость взятия переменной относительно какого-то объекта (указателя), например:
LDD R0, Y+OFFSET(T::i)
Написал define:
#define OFFSETT(Type, Item) ((int)(&((Type *)0)->Item))
Что впринципе и возврящает необходимую константу. В С++ такой прикол проканывает, в асме старого компилятора тоже, а в новом начинает через один ворчать, мол не константа это.
Подскажите, может есть какие нибудь иные способы решения?


--------------------
Я могу ВСЁ, вопрос, сколько времени у меня это займет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 9 2008, 06:46
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Ivan. @ Oct 9 2008, 08:48) *
#define OFFSETT(Type, Item) ((int)(&((Type *)0)->Item))
Что впринципе и возврящает необходимую константу. В С++ такой прикол проканывает, в асме старого компилятора тоже, а в новом начинает через один ворчать, мол не константа это.
надо посмотреть как в заголовочных файлах нового компилятора определен макрос offsetof(). Настораживает, что компилятор у вас ругается не на каждое выражение, а через одно. Может неспроста? Приведите пример, на который компилятор ругается.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 00:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.0138 секунд с 7
ELECTRONIX ©2004-2016