Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать подстановку в исходнике? сократить запись 
:(
    Опции темы
PILOT
Дата 14.12.2004, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Например, есть все тот же:
Код

union MyUnion2
{
 char  WrReg;
 struct BitStr
 {
   unsigned B1:1;
   unsigned B2:1;
   unsigned B3:1;
   unsigned B4:1;
   unsigned B5:1;
   unsigned B6:1;
   unsigned B7:1;
   unsigned B8:1;
 } Bits;
} MyStruct;

чтобы обратиться к B1 нужно:
Код

MyStruct.Bits.B1=1;

У меня гарантированно не будет в программе повторяющихся B1 B2 и так далее, т.е. все биты имеют уникальные названия.

Можно ли как-то улучшить читабельность программы чтобы написать, к примеру:
Код

B1=1;

А компилятор подставил бы:
Код

MyStruct.Bits.B1=1;

?

СУВ.



--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 14.12.2004, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 19
Всего: 360



По моему только так...

Код
#define B1 MyStruct.Bits.B1



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
srd
Дата 14.12.2004, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Однако злоупотребление макросами считается плохим стилем.
Для начала попробуй так:
Код

union MyUnion2
{
 char  WrReg;
 struct
 {
   unsigned B1:1;
   unsigned B2:1;
   unsigned B3:1;
   unsigned B4:1;
   unsigned B5:1;
   unsigned B6:1;
   unsigned B7:1;
   unsigned B8:1;
 };
} MyStruct;

int main(void)
{
   // теперь к полям можно обращаться с помощью такой, более
   // коротокой записи.
   MyStruct.B1 = 0;

   return 0;
}

Но безымянные объекты структур/объединений - это нестандартное расширение языка и может не поддерживаться твоим компилятором.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
bel_nikita
Дата 14.12.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



ИМХО, так лучше:
Код

typedef struct MyUnion2
{
 union{
  char  WrReg;
  struct
  {
    unsigned B1:1;
    unsigned B2:1;
    unsigned B3:1;
    unsigned B4:1;
    unsigned B5:1;
    unsigned B6:1;
    unsigned B7:1;
    unsigned B8:1;
  };
 };
} MyStruct;

int main(void)
{
  // теперь к полям можно обращаться с помощью такой, более
  // коротокой записи.
  MyStruct Struct;
 Struct.B1 = 0;
  return 0;
}

В последствии будет меньше проблем smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.