Есть вот такой вот макрос:
#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 ===|
Как это победить?
Здравствуйте, 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
Здравствуйте, 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
Смысл был в том что бы при реализации задать новые значение в массиве. Спасибо за совет