kochkuroff 0 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба Столкнулся с такой задачей - нужно реализовать в С макрос в котором будет объявляться переменная для хранения промежуточных данных. Причем переменная не должна умирать после завершения кода макроса, чтобы в последующем цикле макрос мог взять из нее данные. Мало того, этот макрос будет встречаться в коде сотни раз и в каждом месте он должен создавать свою переменную. Т.е. когда макрос встречается в коде первый раз, он должен создавать переменную VAR0001 , второй раз VAR0002 и т.д. Если переменная уже создана, т.е. макрос в этом месте выполняется повторно, то ее описание должно игнорироваться. В VisualDSP это реализуется автоматически, но как реализовать этот кошмар в С ??? Нужно перевести код с АДСП на АРМ. Код генерится автоматически с помощью специальной программы из макросов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба Код генерится автоматически.... Тогда пример этого "кода" который якобы VisualDSP понимает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochkuroff 0 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба Тогда пример этого "кода" который якобы VisualDSP понимает. .MACRO MTIMVCS(%0, %1, %2, %3, %4); .LOCAL TIDEL, ETIDEL, NOSBR; .INIT %3: 0; AR=DM(%0); AF=PASS AR; IF EQ JUMP TIDEL; AX1 = %2; DM(%3)=AX1; JUMP ETIDEL; { AR=1} TIDEL: AX0=DM(%3); { AR=0} AF=PASS AX0; IF LE JUMP ETIDEL; AR=DM(%1); AR=PASS AR; IF EQ JUMP NOSBR; AX0=1; NOSBR: AR=AX0-1; DM(%3)=AR; AR=1; ETIDEL: DM(%4)=AR; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба 1.Ну и где генерация дивных переменных? 2.Интересует не сколько внутреннее устройство некого НЕ СИШНОГО макроса, а как это снаружи выглядит. Где VDSP сишный исходник-то? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochkuroff 0 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба Да в том то и дело, что это асм, а теперь надо это реализовать в виде макросов в си Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба Что, на макросах свет клином сошёлся? Всё это звучит жутко странно и совершенно непонятно. Может быть, лучше небольшой кусок кода для наглядности? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochkuroff 0 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба Что, на макросах свет клином сошёлся? В данном случае да. Без макросов реализовать это не выйдет по той причине, что программа генерирующая код из макросов написана очень давно, лет 10 назад. На другом форуме предложили следующее: Код #define макро {static tmp;...} макро; .... макро; преобразуется препроцессором в: {static tmp;...} .... {static tmp;...} этот код и уйдёт в компилятор. На каждое появление в коде конструкции {static tmp;...} будет выделена отдельная переменная tmp, которая будет создана и проинициализирована только один раз, и будет существовать и хранить значения до окончания работы программы. Каждая переменная tmp будет видима только внтури своих скобок {} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба На другом форуме предложили следующее: Совершенно очевидное решение, если вопросы правильно задавать и границы отступления (поскольку это не полностью реализует описанное в первом посте) от желаемого указывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться