LINUX.ORG.RU

Подскажите еще как сделать такой макрос...


0

0

У меня есть большой свич
switch(nCatch)
{
#define PROCESS(a,b) case a: printf(b##); break;
PROCESS(A,aa);
PROCESS(B,bb);
....
Подскажите как сделать результирующее действие вроде printf(b##); таким, что-бы выбрать нужные строчки xy и xz).
Вот как выглядит обычный кейс без макроса
case A:
X = szi(xy[1], xz[5]);
Y = szi(xy[7], xz[3]);
case B:
X = szi(xy[3], xz[4]);
Y = szi(xy[8], xz[7]);
Т.е. в зависимои от кейса менять значения 1 5 и 7 3 в кейсе А или в кейсе В по аналогии...
anonymous

#define PROCESS(a, b1, b2, c1, c2) \
    case a: \
        X = szi(xy[b1], xz[b2]); \
        Y = szi(xy[c1], xz[c2]); \
        break;

Так подойдёт? Или я не правильно понял что тебе нужно?

Deleted
()
Ответ на: комментарий от Deleted

Да, оно, только чот при компиляции еще первого вот такие ошибки...
di.c:35: ошибка: 'aa' undeclared (first use in this function)
di.c:35: ошибка: (Each undeclared identifier is reported only once
di.c:35: ошибка: for each function it appears in.)
di.c:36:1: error: pasting "bb" and ")" does not give a valid preprocessing token
di.c:36: ошибка: 'bb' undeclared (first use in this function)
итд, ну собственно на каждый кейс одинаковые.
Как такое можно исправить? Вообще что-то не понятно какая там функция
 еще, вроде у меня просто значение, хм...

anonymous
()
Ответ на: комментарий от anonymous

>> di.c:35: ошибка: 'aa' undeclared (first use in this function)

Что тут не понятно?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.