Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сделать такой макрос?

37K
03 декабря 2008 года
Semich
18 / / 02.12.2008
Допустим у нас есть следующий код:

Код:
void main()
   {
   int *x[5];
   int x0x=5;
   int x1x=7;
   int x2x=65;
   int x3x=95;
   int x4x=11;
   //что бы записать все в один массив мы делаем следующее
   x[0]=x0x;
   x[1]=x1x;
   x[2]=x2x;
   x[3]=x3x;
   x[4]=x4x;
   }


Это очень муторно, хотелось бы делать это в цикле, пробовал написать макрос:

Код:
#define mac(i) x##i##x
void main()
{
   int *x[5];
   int x0x=5;
   int x1x=7;
   int x2x=65;
   int x3x=95;
   int x4x=11;
   for(int i=0;i<5;i++) x=mac(i);
}


Этот код не работает. В программе мне надо обрабатывать 31 элемент(дни месяца) Static Text. Сначала мне надо создать 31 переменную и после этого как нибудь объединить их в один массив, что бы при вызове какого нибудь события не пришлось для каждого элемента писать свой код, а просто сделать через цикл. Заранее благодарен.
3
03 декабря 2008 года
Green
4.8K / / 20.01.2000
А зачем создавать 31 переменную?
37K
03 декабря 2008 года
Semich
18 / / 02.12.2008
Суть такая:
У меня есть структура(упростил, что бы не захламлять):

Код:
struct peopl
{
   char Name[50];//имя сотрудника
   char Post[50];//должность
   int Hours[31];// кол-во отработанных часов в день
}

class Graphik
{
   public: people PPP[4];

   Graphik()
   {
      ... //инициализируем из файла
   }
   ...
}

Graphik XXX;

Я хочу вывести всю информацию на форму с помощью Static text. С Name и Post не сложно. Но для того, что бы вывести все отработанные часы придется написать 31*4=124 строчки типа:
static1=XXX.PPP[0].Hours[0]
static2=XXX.PPP[0].Hours[1]
...
static32=XXX.PPP[1].Hours[0]
static33=XXX.PPP[1].Hours[1]
UpdataDate(FALSE);
А хотелось бы делать все это в цикле!!!
2.2K
04 декабря 2008 года
REFOT
181 / / 08.04.2005
:) MFC? Если да, то почему бы не сделать так к примеру:


 
Код:
class CMyDlg : public CDialog
{
...
   CString m_static[31];
...
};


 
Код:
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   for(int i = 0; i < 31; i++)
      DDX_Text(pDX, IDC_STATIC1+i, m_static); //тут главное чтобы id элементов шли подряд
}


 
Код:
for(int i = 0; i < 31; i++)
   m_static = XXX.PPP[0].Hours
3
04 декабря 2008 года
Green
4.8K / / 20.01.2000
А почему бы вообще не выводить в таблицу?
288
04 декабря 2008 года
nikitozz
1.2K / / 09.03.2007
Создавать 31 статик и заполнять их в коде "в лоб" явно не лучшее решение.
37K
04 декабря 2008 года
Semich
18 / / 02.12.2008
Я таблицами еще не пользовался. Подскажите где можно найти полезную информацию по организации таблиц.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог