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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структурка на макросах 
V
    Опции темы
Anikmar
Дата 31.3.2009, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(Partizan @  31.3.2009,  13:30 Найти цитируемый пост)
но скорее всего я так и сделаю массив, реализуя собственный алгоритм извлечения данных и помещения их в массив. 

Именно это я и имел в виду.
PM MAIL ICQ   Вверх
baldina
Дата 31.3.2009, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 32
Всего: 101



Цитата

скорее всего я так и сделаю массив

 smile 
поскольку поля по сути не именованы индивидуально, доступ к ним будет по индексу, так что проще обрабатывать в цикле работать с массивом


Это сообщение отредактировал(а) baldina - 31.3.2009, 14:24
PM MAIL   Вверх
xvr
Дата 31.3.2009, 16:16 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Ivanovich @ 31.3.2009,  04:15)
Поскольку структура создается во время компиляции, то её можно сгенерировать предварительно программно до нужного максимума M и поместить в файл
типа my_struct.h с содержанием 
Код

#define MAKE_FIELDS(N,M) \
  #if M>=1 \
  int m1:N \
  #endif \
  #if M>=2 \
  int m2:N \
  #endif \
  #if M>=3 \
  int m3:N \
  #endif \
  //  ....................


и в самой программе 

Код

#include "my_struct.h"

struct X {
    MAKE_FIELDS(N,M)
}

Не выйдет - при раскрытии макроопределений вложенные директивы препроцессора (if с сотоварищами, define и include) не обрабатываются:
Код

#define MAKE_FIELDS(N,M) \
  #if M>=1 \
  int m1:N \
  #endif \
  #if M>=2 \
  int m2:N \
  #endif \
  #if M>=3 \
  int m3:N \
  #endif

MAKE_FIELDS(2,2)

Цитата

C:\!>cl -E tt.c
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

tt.c
#line 1 "tt.c"

tt.c(2) : error C2162: expected macro formal parameter


tt.c(4) : error C2162: expected macro formal parameter

tt.c(5) : error C2162: expected macro formal parameter


tt.c(7) : error C2162: expected macro formal parameter

tt.c(8) : error C2162: expected macro formal parameter


tt.c(10) : error C2162: expected macro formal parameter


if 2>=1 int m1:2 endif if 2>=2 int m2:2 endif if 2>=3 int m3:2 endif
Только через рекурсивные #include (как сделано в boost)

PM MAIL   Вверх
GoldFinch
Дата 31.3.2009, 16:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



бгг Ivanovich скопипастить-скопипастил, а проверить-непроверил))
PM MAIL ICQ   Вверх
Ivanovich
Дата 31.3.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 31.3.2009

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



Теперь проверил, работает


Код

#define  MAKE_FIELD1(N) \
  int m1:N;
#define  MAKE_FIELD2(N) \
  int m1:N; \
  int m2:N;
#define  MAKE_FIELD3(N) \
  int m1:N; \
  int m2:N; \
  int m3:N;
#define  MAKE_FIELD4(N) \
  int m1:N; \
  int m2:N; \
  int m3:N; \
  int m4:N;

  
#define MAKE_FIELDS(N, M) \
 MAKE_FIELD##M(N)

struct S
{
    MAKE_FIELDS(3, 4);
};
int main(int argc, char** argv)
{
    S n;
    n.m4 = 1;
}

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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