Макросы
От: st0nx  
Дата: 05.06.11 09:30
Оценка:
Есть вот такой вот макрос:

#include <iostream>

#define r(a,i) a[i]+0x1
#define dec(i) i-1
#define mac(a,i) (i == 0 ? #a : \
                       (a[i]=r(a,i))?\
                   (i=dec(i)?\
                    mac(a,i)\
                    :0)\
                    :0)



using namespace std;

int main()
{
    char asd[] = "asdf";
    int i = 3;
    cout << mac(asd,i) << endl;
    return 0;
}


при компиляции выдает это:

/pj/macros/main.cpp||In function ‘int main()’:|
/pj/macros/main.cpp|20|error: ‘mac’ was not declared in this scope|
||=== Build finished: 1 errors, 0 warnings ===|


Как это победить?
Re: Макросы
От: genok Россия  
Дата: 05.06.11 10:20
Оценка: +1
Здравствуйте, st0nx, Вы писали:

S>Есть вот такой вот макрос:



S>#define mac(a,i) (i == 0 ? #a : \

S> (a[i]=r(a,i))?\
S> (i=dec(i)?\
S> mac(a,i)\
S> :0)\
S> :0)


ваш рекурсивный макрос виной той ошибке. макросы не разворачиваются как рекурссивные функции. лучше написать шаблон
про рекурсивные макросы http://www.linuxshare.ru/docs/devel/languages/cpp/cpp-5.html
Re[2]: Макросы
От: st0nx  
Дата: 05.06.11 10:40
Оценка:
Здравствуйте, genok, Вы писали:

G>Здравствуйте, st0nx, Вы писали:


S>>Есть вот такой вот макрос:



S>>#define mac(a,i) (i == 0 ? #a : \

S>> (a[i]=r(a,i))?\
S>> (i=dec(i)?\
S>> mac(a,i)\
S>> :0)\
S>> :0)


G>ваш рекурсивный макрос виной той ошибке. макросы не разворачиваются как рекурссивные функции. лучше написать шаблон

G>про рекурсивные макросы http://www.linuxshare.ru/docs/devel/languages/cpp/cpp-5.html

Смысл был в том что бы при реализации задать новые значение в массиве. Спасибо за совет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.