Keil C: function pointers array

Do you have a question? Post it now! No Registration Necessary

Threaded View
Hello, All!

Помогите начинающему.

Как объявить сабж? Если следовать рекомендации мануала (void (*f)(int i); для
одиночного указателя), мне ничего лучшего, чем

    void (*MenuGuide)(uchar pre)[] = {(uchar *)MS0, (uchar *)MS1};

в голову не пришло... Hу, в общем, хотелось объявить и инициализировать массив
указателей на функции MS0, MS1, чтобы потом использовать его в меню-сёрфинге.

Как ни переставлял скобочки :), от ругательств компилера не избавился.

Пока решил проблемку горбато: создал вектор адресов и потом кастомизировал его
элементы в указатели на функции нужного типа. Hо некузяво как-то.

    MenuNode = ((uchar (code *)(uchar)) MenuGuide[MenuNode]) (MenuNode);

ЗЫ. Кейл Ц 6.01.
ЗЗЫ. Краем уха видел в эхе (с месяцок тому) какие-то обсуждения вариантов
построения меню на эхотаге. Пропустил, как обычно бывает, думал "не
пригодится". Был бы рад, если б некий доброжелатель отмылил мне этот тред.


С уважением,
Юрий Крючков aka Юрий Юрьевич.


Re: Keil C: function pointers array
Hello Yiuri,


YK> Как объявить сабж? Если следовать рекомендации мануала (void (*f)(int i); для
YK> одиночного указателя), мне ничего лучшего, чем

YK>     void (*MenuGuide)(uchar pre)[] = {(uchar *)MS0, (uchar *)MS1};

YK> в голову не пришло... Hу, в общем, хотелось объявить и инициализировать
массив

YK> указателей на функции MS0, MS1, чтобы потом использовать его в меню-сёрфинге.

YK> Как ни переставлял скобочки :), от ругательств компилера не избавился.

typedef  void (code * MENU_FUNC_T)(char pre);

void MS0 (char pre)
{
 pre = pre;
}

void MS1 (char pre)
{
 pre = pre;
}

code const MENU_FUNC_T MenuArray[] = {MS0, MS1};

И лучше 6.01 не используй, глюки там.

--
С уважением,
 Andy

We've slightly trimmed the long signature. Click to see the full one.
Keil C: function pointers array
Привет Yiuri!

18 Feb 04 19:33, Yiuri Kruchkov писал All:

 YK> Как объявить сабж? Если следовать рекомендации мануала (void (*f)(int
 YK> i); для одиночного указателя), мне ничего лучшего, чем

 YK>     void (*MenuGuide)(uchar pre)[] = {(uchar *)MS0, (uchar *)MS1};

 YK> в голову не пришло... Hу, в общем, хотелось объявить и
 YK> инициализировать массив указателей на функции MS0, MS1, чтобы потом
 YK> использовать его в меню-сёрфинге.

    Hе надо стараться запихнуть кучу определений в одно выражение - сам
запутаешься и другие ничего не поймут. Определяй типы постепенно от простого к
сложным. Hапример так:

typedef void MenuItem(int);

void item1(int);
void item2(int);
void item3(int);
void item4(int);

MenuItem* MenuGuide[] = { item1, item2, item3, item4 };

    Hе правда ли, так гораздо прозрачнее и понятнее?

 YK> ЗЗЫ. Краем уха видел в эхе (с месяцок тому) какие-то обсуждения
 YK> вариантов построения меню на эхотаге. Пропустил, как обычно бывает,
 YK> думал "не пригодится". Был бы рад, если б некий доброжелатель отмылил
 YK> мне этот тред.

    Искать лень, могу выслать эту эху за последние год-два в JAM. Если надо,
пиши на alx-собачка-intellectronika.ru

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Старый глюк лучше новых двух...

Keil C: function pointers array
Hello Yiuri.

18 Feb 04 19:33, you wrote to all:

 YK> Помогите начинающему.

 YK> Как объявить сабж? Если следовать рекомендации мануала (void (*f)(int
 YK> i); для одиночного указателя), мне ничего лучшего, чем

 YK>     void (*MenuGuide)(uchar pre)[] = {(uchar *)MS0, (uchar *)MS1};

 YK> в голову не пришло...

Лучшее тут уже подсказали (через typedef), а оригинал должен был выглядеть так:

void (*MenuGuide[])(uchar pre) =;

Roman


Re: Keil C: function pointers array
Hемедленно нажми на RESET, Yiuri Kruchkov!


 YK> Помогите начинающему.

  Есть такие замечательные программы: cdecl и cundecl.  Должны входит в
комплект, вместе с собственно компилятором (cc), а также с cflow.
Последняя строит граф вызовов функций, использования переменных.
А эти две переводят объявления на языке C на английский язык, и
наоборот. Иногда очень полезно бывает...

 YK> Как объявить сабж?

  Для этого надо мысль выражать яснее... хотя бы на естесственном языке.
Рискну предположить, что имеется ввиду массив указателей на функции:

sysop@pc:sysop$ cundecl
declare x as array of pointer to function that expects (int) returning void;
void (*x[])(int);
 
 YK> Если следовать рекомендации мануала (void (*f)(int i); для
 YK> одиночного указателя), мне ничего лучшего, чем
 YK>     void (*MenuGuide)(uchar pre)[] = {(uchar *)MS0, (uchar *)MS1};

  А так получается:

    declare MenuGuide as pointer to function that expects (uchar) returning
    array of void;
 
  Всё совсем не так...

 YK> в голову не пришло... Hу, в общем, хотелось объявить и инициализировать
 YK> массив
 YK> указателей на функции MS0, MS1, чтобы потом использовать его в
 YK> меню-сёрфинге.

   Эхотаг на оффтопике!   void (*MenuGuide[])(char) = {MS0, MS1};

 YK> ЗЫ. Кейл Ц 6.01.

   Да хоть GCC 5.0! Какая разница?

 YK> ЗЗЫ. Краем уха видел в эхе (с месяцок тому) какие-то обсуждения вариантов
 YK> построения меню на эхотаге. Пропустил, как обычно бывает, думал "не
 YK> пригодится". Был бы рад, если б некий доброжелатель отмылил мне этот тред.

   google никто не отменял.



Site Timeline