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

Тема в разделе "LANGS.C", создана пользователем synoptick, 16 июн 2008.

  1. synoptick

    synoptick New Member

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

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    synoptick
    #define PROCESS(a,b,c,d,e) case a: X = szi(xy, xz[c]);Y = szi(xy[d], xz[e]);break; ?
     
  3. synoptick

    synoptick New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2008
    Сообщения:
    50
    о, сенк, че-то я забыл подумать, но вот странно, у меня и с принтом при компиляции сырца вот такие ошибки...
    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)
    как такое можно исправить?
     
  4. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    Код мб? Сути вопроса что-то не уловил, выложи то что у тебя в строках 35 и 36